Je fais un jeu simple, et l'un des problèmes que j'ai rencontrés est le retard ennuyeux lorsque j'appuie sur une touche en continu.
Donc, fondamentalement, lorsque j'appuie (pendant très longtemps) par exemple Up, mon objet se déplace d'une unité vers le haut, ne se déplace pas (pendant environ 1 seconde), puis se déplace continuellement d'une unité vers le haut (sans aucun retard).
Actuellement, j'utilise ceci pour déplacer l'objet (SDL2):
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP:
//Move object 1 unit up
break;
//Other unrelated things omitted
}
break;
//Omitted other cases
}
}
Ce que j'aimerais, c'est supprimer le retard, afin que l'objet puisse se déplacer immédiatement Uptrès rapidement. Est-ce qu'il y a un moyen de faire ça?
while key UP is down move 30 units per second
- et par seconde n'a de sens que lorsque vous avez un temps mesurable entre la clé vers le bas et vers le haut - généralement plus d'une image.Une autre façon (l'approche de Josh est également excellente!) Serait de configurer un booléen
SDL_KEYDOWN
, et peut-être aussi d'ignorer tous les événements clés répétés. Pour ce faire, vérifiez lerepeat
membre de l'événement clé.Ensuite, vous pouvez implémenter votre propre minuterie, qui n'a rien de compliqué, et implémenter vous-même la répétition des touches. Vous pouvez soit déclencher l'action directement à partir du minuteur, soit même générer un
SDL_KEYDOWN
événement et unifier les solutions.la source