Bonjour,
j'ai un petit soucis avec la détection de touche. Je vous met le bout de code concerné plus bas pour que vous ayez une idée.
Enfait je détecte l'appuie sur trois touches (la touche échap, la flèche gauche et la flèche droite), le problème c'est que comme je l'ai programmé on a l'impression que mon jeu lagg parce que la boucle principale n'est éxecuté que toutes les une seconde. Donc quand j'appuie sur une de mes 3touches je peux avoir jusqu'a une seconde qui se passe avant que l'action qui lui est associé ne soit éxecuté.
Evidement je ne peux pas réduire ce temps dans ma boucle car les autres fonctions doivent elles être éxecuté toutes les 1s.
Comment puis je faire pour que ma boucle soit bien éxecutée toutes les 1s mais pour que quand j'appuie sur mes touches elles soient détectées immédiatement?
while(continuer == 1)
{
tempsActuel = SDL_GetTicks();
if (tempsActuel - tempsPrecedent > 1000) // Si 1s se sont écoulées
{
while (SDL_PollEvent(&event)) //on récupère les éveenements (fonction non blocante contraiement a SDL_WaitEvent).
{
switch (event.type)
{
case SDL_QUIT: // On quitte si l'utilisateur a cliqué sur la croix.
continuer = 0;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE: // On quitte si l'utilisateur appuie sur la touche echap.
continuer = 0;
break;
case SDLK_LEFT: // On quitte si l'utilisateur appuie sur la touche echap.
dpltGauche(tabPlateau, pieceTombe, nbrCarreLigneTotal+1, nbrCarreColonneTotal-2);
break;
case SDLK_RIGHT: // On quitte si l'utilisateur appuie sur la touche echap.
dpltDroite(tabPlateau, pieceTombe, nbrCarreLigneTotal+1, nbrCarreColonneTotal-2);
break;
default:
break;
}
break;
}
}
//// Appelle de diverse fonction ////
tempsPrecedent = tempsActuel; // Le temps "actuel" devient le temps "precedent" pour nos futurs calculs
//// Affichage de l'écran de fond. ////
//// Blitage des carres. ////
//// Actualisation de l'affichage. ////
}
else //Si ça fait moins de 1s depuis le dernier tour de boucle, on endort le programme le temps qu'il faut pour que sa fasse une seconde.
{
SDL_Delay(1000 - (tempsActuel - tempsPrecedent));
}
}