Appuie silmutane de deux touches

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Appuie silmutane de deux touches

Messagede tmator le 21 Fév 2006 09:29

Bonjour,

je débute sur SDL et je tien a dire que les tutos sont super :pouce:

Je vous explique mon probleme, je deplace un personnage en appuyant sur les touches haut, bas gauche et droite (jusque la tout est normal), et je veu que le personnage puisse tirer avec un zouli pistolet. Le hic c'est que je n'arrive pas a faire ca, il faut que le personnage puisse continuer a se deplacer tout en tirrant avec la barre espace, actuelement mon code ressemble a ca :

Code: Tout sélectionner
while (SDL_WaitEvent(&event)) {

          switch (event.type)
          {

          case SDL_KEYDOWN:
                  switch (event.key.keysym.sym)
                  {

                          case SDLK_ESCAPE:
                                  SDL_Quit();
                                  exit(0);
                                  break;

                           case SDLK_RIGHT:
                                  v1.state=0;
                                  v1.r_v.x=v1.r_v.x+3;
                                  break;
                           case SDLK_LEFT:
                                  v1.state=0;
                                  v1.r_v.x=v1.r_v.x-3;
                                  break;
                           case SDLK_UP:
                                  v1.state=1;
                                  v1.r_v.y=v1.r_v.y-3;
                                  break;
                           case SDLK_DOWN:
                                  v1.state=1;
                                  v1.r_v.y=v1.r_v.y+3;
                                  break;
                          default:
                                  break;
                  }

          }
            actualiser();

  }

}


Ou et comment puis je rajouter un appel a la fonction
"void tire(int x, int y)" quand on appuie sur la touche espace ?

Merci de votre aide.
tmator
 

Messagede moi1392 le 21 Fév 2006 10:52

Salut et merci :) j'espère que t'as appris plein de choses :)

Pour ton problème, essaie d'ajouter dans ton switch le case suivant :

Code: Tout sélectionner
case SDLK_DOWN:
    ..blabla;
    break;
case SDLK_SPACE:
    tire(ton_x, ton_y);
    break;
default:
    ;


Bien sur, remplace "ton_x" et "ton_y" par les valeurs x et y qye tu souhaites ;)
Le problème, c'est que tu utilises la fonction SDL_WaitEvent pour récuperer les évenements, cette fonction est bloquante et ne te permet pas de faire de l'animation en continu car elle ne te rends la main que lorsqu'un évenement arrive.
es-tu arrivé au tutoriel 4 : http://vally8.free.fr/coinprog/sdl/tut4/timer.php qui explique comment remplacer la fonction SDL_WaitEvent par la fonction PollEvent qui elle n'est pas bloquante et te permet de faire de l'animation en temps réel ?
Le tutoriel 5 est bien aussi car il explique comment gerer cette l'animation et la mise à jour des sprites dans le code. Je pense que c'est la bonne solution à ton problème.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede tmator le 21 Fév 2006 12:21

Hehe,
le seul des tutos que j'ai pas lu #-o

Bon j'ai fait comme tu m'a dit,
mais des que j'appui sur espace mon perso s'arrette :(
tmator
 

Messagede moi1392 le 21 Fév 2006 13:53

tu peux m'envoyer ton code si tu veux mais je ne pourrais pas y jeter un oeil avant ce soir.

le problème viens surement de ta façon de gerer et de mettre à jour ton perso. ce que doit faire la fonction tire() (comme les fonctions de déplacement d'ailleurs) c'est mettre une variable booléenne à true et dans la fonction de mise à jour (qui est appelée ailleur, voir le tuto sur les sprites) tu vérifies ta variable et tu agis en conséquence.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam


Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

cron