begin process at 2010 02 10 04:17:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

pour que mes touches soient détectées immédiatement


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pour que mes touches soient détectées immédiatement

samedi 4 avril 2009 à 13:30:42 | pour que mes touches soient détectées immédiatement

snake57

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));
        }
    }
samedi 4 avril 2009 à 13:32:14 | Re : pour que mes touches soient détectées immédiatement

snake57

Juste une petite précision, je travaille en C pas en C++
samedi 4 avril 2009 à 14:46:36 | Re : pour que mes touches soient détectées immédiatement

juju12

Réponse acceptée !
Bof t'as le choix :
tu peux utiliser un thread pour la gestion des touches et un autre pour l'affichage (cela dit, je ne sais pas si avec SDL...)
Sinon tu peux faire un truc du genre :

while(running)
{
   _Gestion_Evenements();
   if(temps_actuel-temps_precedent>=1s) _Affichage();
   _Delay(20 ms);
}
samedi 4 avril 2009 à 15:19:55 | Re : pour que mes touches soient détectées immédiatement

snake57

salut,

ben justement je crois pas qu'avec la sdl se soit possible.

Mais je ne sait pas quoi utiliser, c'est sa ma question.
samedi 4 avril 2009 à 16:42:59 | Re : pour que mes touches soient détectées immédiatement

juju12

OK pour pas thread alors...
mais pourquoi pas ce que je t'ai proposé après?
samedi 4 avril 2009 à 16:58:36 | Re : pour que mes touches soient détectées immédiatement

snake57

Bah ce que tu me donnes, c'est un peu la mm chose que ce que je fais non?

Sa "endort" le prog pendant un certain temps, donc si tu appuies sur une touche durant cet "endormissement" l'appuie sur la touche ne sera pris en compte que lorsque le prog se réveille et refait la boucle.
samedi 4 avril 2009 à 18:50:22 | Re : pour que mes touches soient détectées immédiatement

juju12

sauf qu'en l'occurence tu exécutes ta boucle toutes les 20 millisecondes et pas toutes les secondes...
C'est ça le truc : il faut que tu parcoures ta boucle très souvent mais tu fais l'affichage seulement toutes les secondes...ou alors dès qu'il y a une modif due à l'appui sur une touche.
samedi 4 avril 2009 à 19:31:30 | Re : pour que mes touches soient détectées immédiatement

snake57

Oui c'est vrai, je suis passé trop vite sur ton code. je pensais simplement que tu me demandait de réduire le tps de la boucle a 20ms.

Merci pour tes réponses, j'ai adapté à mon code et sa fonctionne.


Cette discussion est classée dans : case, break, touche, sdl, appuie


Répondre à ce message

Sujets en rapport avec ce message

InvalidateRect en boucle. [ par tintin72 ] Bonjour,Je voudrais envoyer plusieurs fois le message InvalidateRect lors de l'appuie sur une touche du clavier (case WM_KEYDOWN)  pour provoquer à ch GESTION CLAVIER SDL [ par Batman60 ] voici un bout de code qui  sert à me déplacer dans une scène 3D opengl ,le problème c'est qu'il faut à chaque fois appuyer sur la touche pour ce dépla SDL porbleme [ par fahdovski ] IL Y'A EXECUTION MAIS LE PC PLANTE IL DEVIENT TRES LENT, MAIS POURQUOI??????jE TRAVAILLE SUR CODE::BLOCKS SOUS LINUXAVANT CA MARCHAIS IMPEC QUESQUI C' Deplacement de plusieurs sprites à l'écran (SDL) [ par rasolofomanana ] Bonjour à tous, je débute en C et j'essaie de créer un programme où l'on peut déplacer plusieurs sprites à l'écran, par cases de 40px. Le problème es Touches clavier [ par F0ra ] Salut,Mon problème c'est que ça ne fonctionne pas quand j'appuie sur la touche de droite et bas en même temps par exemple.Que faire ?case WM_KEYDOWN:s logiciel Borland C++ et DevC++ [ par waldomania ] Bonjour, j'ai un grand problème car j'ai programmé un mini projet sur un Dev C++ mais ça marche pas à Borland C++ le projet est en langage c (!=C++) Configuration souris SDL [ par darkane78 ] Bonjour,J'aimerais bien réalisé un jeu de dame, seulement je suis bloqué au niveau du configuration de la souris.Je voudrais pouvoir cliquer sur un pi Keylogger probleme code [ par rebelattack ] bonjour,J'ai un probleme lorsque je veux compiler ce code. Je suis débutant, mais j'ai réunis plusieur code et çà doit etre la le probleme. donc lorsq Récupérer les événements sur une frame dans C++ via JNI [ par PleoX ] Bonjour,(J'espère avoir mis mon sujet dans le bon thème. J'ai pas trouvé de thème plus aproprié.)Je suis en train de créer une application multi-touch


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales