Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL et le clavier

gérer deux monvements en même temps

Sujet résolu
    16 mai 2006 à 16:32:08

    Salut a tous :)

    J'ais un petit problême... :-°
    Je voudrais pouvoir deplacer en même temps deux images dans un meme fenetre ... Je sais que cette question a déjà été posée mais je ne la retrouver pas :euh: ...

    Si quelqu'un pourrait m'aider ...

    Toute aide est la bienvenue :D

    -Cloud-
    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2006 à 16:50:40

      Ben tu fais exactement comme pour un images, sauf que tu modifies 2 coordonnées (celles de chacunes des images) et que tu fais 2 blits :)
      • Partager sur Facebook
      • Partager sur Twitter
        16 mai 2006 à 17:01:40

        Ce que je veux, c'est pouvoir bouger les deux images en même temps. pour l'instant lorsque je demplace une image, l'autre est immobilisée jusqu'a ce que celle qui est en mouvement s'arrete.

        Si quelqu'un sait comment faire ...

        merci de voitre aide :D
        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2006 à 17:43:59

          Bha à un moment tu fais bien coordonnées_image1.x++ bha tu rajoute un coordonnées_image2.x++ juste apres et avant le SDL_Flip .
          • Partager sur Facebook
          • Partager sur Twitter
            16 mai 2006 à 19:11:39

            J'ais bien deux images ... elles sont dirigeables au clavier ...
            Probleme : Les images ne peuvent pas etre en mouvement en meme temps ...
            • Partager sur Facebook
            • Partager sur Twitter
              16 mai 2006 à 19:14:52

              Je dois avoir la soluc dans un programme, je cherche et je te la file

              EDIT: Voila le prog
              #include <stdlib.h>
              #include <stdio.h>
              #include <SDL/SDL.h>

              int main(int argc, char *argv[])
              {
                  SDL_Surface *ecran = NULL, *zozor = NULL, *herbe = NULL;
                  SDL_Rect positionZozor;
                  SDL_Rect positionHerbe;
                  SDL_Event event;
                  int continuer = 1;
                  int flechehautej1 = 0;
                  int flechebassej1 = 0;
                  int flechehautej2 = 0;
                  int flechebassej2 = 0;
                  int flechegauchej1 = 0;
                  int flechedroitej1 = 0;
                  int flechegauchej2 = 0;
                  int flechedroitej2 = 0;

                  positionZozor.x = 100;
                  positionZozor.y = 100;
                  positionHerbe.x = 0;
                  positionHerbe.y = 0;


                  SDL_Init(SDL_INIT_VIDEO);

                  SDL_EnableKeyRepeat(10, 10); /* Activation de la répétition des touches */
                  ecran = SDL_SetVideoMode(1000, 600, 32, SDL_HWSURFACE| SDL_DOUBLEBUF);


                  herbe = SDL_LoadBMP("sdl_icone.bmp");
                  zozor = SDL_LoadBMP("zozor.bmp");

                          SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

                  SDL_SetColorKey(herbe, SDL_SRCCOLORKEY, SDL_MapRGB(herbe->format, 0, 0, 0));
                  while (continuer)
              {
                  SDL_PollEvent(&event);
                  switch(event.type)
                  {
                      case SDL_KEYDOWN:
                          switch(event.key.keysym.sym)
                              {
                                  case SDLK_ESCAPE:
                                  continuer = 0;
                                  break;
                                  case SDLK_UP:
                                  flechehautej1 = 1;
                                  break;
                                  case SDLK_DOWN:
                                  flechebassej1 = 1;
                                  break;
                                  case SDLK_LEFT:
                                  flechegauchej1 = 1;
                                  break;
                                  case SDLK_RIGHT:
                                  flechedroitej1 = 1;

                                  break;


                                  case SDLK_e:
                                  flechehautej2 = 1;
                                  break;
                                  case SDLK_d:
                                  flechebassej2 = 1;
                                  break;
                                  case SDLK_s:
                                  flechegauchej2 = 1;
                                  break;
                                  case SDLK_f:
                                  flechedroitej2 = 1;

                                  break;







                          }
                      break;

                      case SDL_KEYUP:
                      flechehautej1 = 0;
                      flechebassej1 = 0;
                      flechehautej2 = 0;
                      flechebassej2 = 0;
                      flechegauchej1 = 0;
                      flechedroitej1 = 0;
                      flechegauchej2 = 0;
                      flechedroitej2 = 0;


                  }

              if(flechehautej1)
              positionZozor.y--;
              if(flechebassej1)
              positionZozor.y++;
              if(flechegauchej1)
              positionZozor.x--;
              if(flechedroitej1)
              positionZozor.x++;

              if(flechehautej2)
              positionHerbe.y--;
              if(flechebassej2)
              positionHerbe.y++;
              if(flechegauchej2)
              positionHerbe.x--;
              if(flechedroitej2)
              positionHerbe.x++;










                  SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
              SDL_BlitSurface(herbe, NULL, ecran, &positionHerbe);
              SDL_Flip(ecran);

              }





                  SDL_FreeSurface(zozor);
                  SDL_FreeSurface(herbe);
                  SDL_Quit();

                  return EXIT_SUCCESS;
              }
              • Partager sur Facebook
              • Partager sur Twitter
                16 mai 2006 à 22:30:21

                Je comprends pas où se site ton problème, pour faire bouger tes 2 images tu veux utiliser un jeu de touche (haut,bas,gauche,droite) ou comme le propose L7G5 en en utilisant 2 (comme avant avec en plus e,d,s,f) ?

                Si tu sais faire bouger une image je vois pas pourquoi tu aurais du mal à bouger la seconde vu que c'est le même principe, au moment de modifier les coordonnées de la première tu modifies celles de la seconde et le tour est joué.
                • Partager sur Facebook
                • Partager sur Twitter
                  16 mai 2006 à 22:38:28

                  Le problème est que quand tu active la répétition des touches et que tu appuye sur la touche A pour faire bouger une image, le programme ne voit plus que cet événement et si tu appuye en même temps sur une touche B la deuxième image ne bouge pas. Pour pouvoir bouger la deuxième image, il faut relacher la première touche et réappuyer sur la seconde. Ton programme ne peut pas gérer deux événements en même temps (ou si il le peut on ne l'a pas vu à ce niveau de l'avancement du cours de M@teo). La solution? je sais pas :):)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 mai 2006 à 22:42:40

                    Peut etre enlever les breaks des cases.. pour qu'il soient considérés comme des if , if , if , ... et non else if ..

                    Sinon tu met directement des if,if,if,if,.. à la suite pour activer/desactiver les booleens .. des fleches.. ça doit marcher; je l'ai déja fait !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 mai 2006 à 23:05:17

                      Salut !
                      Si seb13 a posé le probleme correctement, la solution est simple :
                      -tu n'actives pas la repetition des touches.
                      -tu créés une variable pour chaque touche qui peut diriger les images.
                      -au moment où une touche est enfoncée, sa variable associée passe à 1 et quand tu la relaches, elle revient à 0.
                      -tu deplaces tes images en fonctions des touches memorisées comme actuellement enfoncées !
                      Et normalement le tour est joué... (tes images risquent de se deplacer un peu vite, alors tu devras gerer le temps...mais ceci est une autre histoire).

                      Cela revient à peu pres au code d'au dessus, sauf qu'il faut aussi decomposer le SDL_KEYUP.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2006 à 19:00:46

                        Ok mreci pour toutes ces infos ! :D

                        Je m'y mets de suite :)
                        Je vous tiens au courrant !

                        [edit :] C'est bon cela fonctionne ! Cependant, lorsque je relache une touche pendant que les deux images bougent, les deux s'arretent ... je pense savoir pourquoi je vais donc voir ca de plus près tout seul comme un grand :) Merci de votre aide ! [/edit]
                        • Partager sur Facebook
                        • Partager sur Twitter

                        SDL et le clavier

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown