Petit probleme avec la SDL

Fermé
chaa13 - 27 mars 2013 à 17:45
NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 - 4 avril 2013 à 16:41
Bonjour,
J'ai un question en C avec la bibliothèque SDL : En faisant un Waitevent(), Si l'appui sur une touche (la touche A) une action se produit comme jouer de la musique, puis en laissant enfoncer la touche A j'appuis sur une autre (touche B), l'action de la touche B (ouvrir une image) va être lancer, mais si j'arrête d'enfoncer la touche B et bien l'action de la touche A (la touche est rester enfoncer tout au long) ne se relance pas, il faut que j'arrête de l'enfoncer puis de la ré enfoncer !Comment je peut faire pour ne pas avoir besoin de la ré enfoncer ? Quelqu'un a une idée pour parer a ce problème ?

Merci d'avance !!
Chaa13



11 réponses

NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
Modifié par NiicoDu42 le 27/03/2013 à 18:32
SDL_KEYUP
SDL_KEYDOWN
essais de changer pour voir ! :)
0
hey !
Heu... justement enfait, quand je reste appuyer sur la touche A ou B une action se declanche mais des que jarrette d'appuyer sur A ou B ma fonction KEY_UP dira d'envoyer un nombre qui permettra d'arrêter toute les action en cours !
Tu as une idée ?
Merci d'avance ^^
0
NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
27 mars 2013 à 18:59
Peux tu mettre ton code ? ^^
0
Ok, voici la seulement la partie interressante ^^ :
PS: le " RS232_SendByte" sert seulement a envoyer des donnée sur un port serie !
Ne fait surtout pas attention au "if" inutile (il me servent ^^)
int continuer = 1;
SDL_EnableKeyRepeat(1,1);
SDL_Event event;
while (continuer)
    {
t = 1;
s = 1;
u = 1;
w = 1;
x = 1;


        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
            case SDL_KEYDOWN:
             switch(event.key.keysym.sym)
             {
            case SDLK_UP:
                    if(s == 1)
                    {
                         RS232_SendByte(5,'3');
                    //s++;

                    }
                    break;
            case SDLK_RIGHT:
                if(u==1)
                {
                     RS232_SendByte(5,'4');
                    u++;
                }


                break;
            case SDLK_LEFT:
                if(w==1)
                {
                     RS232_SendByte(5,'5');
                   //  w++;
                }
                break;
            case SDLK_DOWN:
                if(x==1)
                {
                    RS232_SendByte(5,'1');
                   // x++;
                }

                break;

}
             break;
          case SDL_KEYUP:
            RS232_SendByte(5,'0');
                         // t++;
                        break;


        }

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
28 mars 2013 à 20:23
Je ne suis pas un pro de la SDL mais quand tu déclares ton événement comme ça : SDL_Event event;
Essayes dans déclarer un deuxième : SDL_Event event, event2;
Et tu les testes --> tu mets "event" pour l'image
et tu mets "event2" pour la musique par exemple.

Je ne suis vraiment pas sur de ça mais ça vaut le coût d'essayer. ^^
0
Hey !
J'ai essayer, mais le truc c'est que je dois appuyer sur deux touche pour lancer quelques chose ! Est ce que tu pense que ca viendrait d'autre part comme justement l'information qui est envoyer par un touche quand elle est appuyer, n'est pas renvoyer, ou elle est renvoyer mais quand une autre touche est appuyer ça n'envoi plus l'info comme quoi la première touche est appuyer ?

merci d'avance !!
0
NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
29 mars 2013 à 19:12
Essais le même code mais à la place de waitevent tu mets pollevent et dit moi si ça bouge ! ;)
0
Heu ... ca fait un truc vraiment bizzar la je dois appuyer plusieurs fois sur un touche pour lancer un action...
0
NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
1 avril 2013 à 20:30
il faut ralentir ta boucle avec un SDL_Delay(10); par exemple (10 est le temps a attendre pour recommencer la boucle tu peux en mettre plus ... )
0
Hey,
Heu nan ca change rien :( j'ai essayer plusieurs valeur mais rien !
Je pourrais essayer de faire quelque chose qui dit au programme que si la touche A et enfoncé mais quelle n'est pas relâcher alors mettre a = 0, si B et enfoncer puis relacher et que a = 0 et bien lancer A ! Mais j'ai du mal a le faire, tu serait pas comment je pourrais my prendre ?
Merci d'avance !
0
NiicoDu42 Messages postés 157 Date d'inscription mardi 8 janvier 2013 Statut Membre Dernière intervention 20 mars 2017 10
4 avril 2013 à 16:41
Oui voilà, donc essayes de faire un truc dans le genre :
Si tu appuis sur la touche "A", mettre VarA=1
if(VarA == 1){//faire l'action voulu}

Comme ça a chaque tour de boucle il fera ce que tu veux, mais essayes de te débrouiller avec des conditions je pense que c'est faisable.

Mon aide n'est pas très claire, mais bon ... ^^
0