Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL, déplacer une surface.

Sujet résolu
    26 juin 2007 à 15:34:56

    Bonjour,

    Je vous écrit car je ne trouve pas la solution dans les tutoriels et en analysant le code du TP sokoban je ne comprend pas pourquoi ma solution ne fonctionne pas.

    Je créé actuellement un menu avec une flèche sensée se déplacée sur les titres.

    Voici mon code :
    // Image de la fleche
        pos_fleche.x = 200;
        pos_fleche.y = 350;
        fleche_menu = SDL_LoadBMP("fleche.bmp");
        SDL_BlitSurface(fleche_menu, NULL, ecran, &pos_fleche);
        SDL_Flip(ecran);

        testmenu = 1;
        while(testmenu) {
            SDL_WaitEvent(&menu);
            switch(menu.type) {
                case SDL_KEYDOWN:
                    if (menu.key.keysym.sym == SDLK_UP) {
                        pos_fleche.y = pos_fleche.y - 30;
                    } else if (menu.key.keysym.sym == SDLK_DOWN) {
                        pos_fleche.y = pos_fleche.y + 30;
                    }
                    break;
                case SDL_QUIT:
                    testmenu = 0;
                    break;
            }
        }


    Sur le TP MarioSokoban, Mateo modifie la valeur du SDL_Rect (ici pos_fleche) et seulement cela. Hors ici rien n'est modifié à par la valeur de la variable (j'ai testée en l'écrivant dans stderr).

    Merci pour vos suggestions.
    +++
    Teriblus !
    • Partager sur Facebook
    • Partager sur Twitter
      26 juin 2007 à 16:11:13

      Je te réponds sans grande certitude, et tu m'arrêtes si c'est pas ca du tout, mais il me semble que les fonctions
      SDL_Flip(ecran);
      SDL_BlitSurface(fleche .....etc.);
      ne sont pas incluses à la boucle principale,
      while(testmenu){ }
      ce qui pourrait faire que ton programme n'est pas mis à jour apres le déplacement de la fleche
      Voila mon idée, à toi de voir si
      • Partager sur Facebook
      • Partager sur Twitter
        26 juin 2007 à 22:45:50

        Et bien j'y es pensé c'est d'ailleurs ma première solution.

        Ceci marche mais l'ancienne surface n'est pas effacée et la fleche apparait en double (enfin, une pour chaque préssion de touche).

        De plus il semble que Mateo modifie uniquement le SDL_Rect qui contient la position. Bizarre bizarre..

        Merci pour ta réponse quand même :)
        Si quelqu'un a quelquechose à proposé ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2007 à 0:09:32

          en fait, il faut que tu prenne le principe de Lalu

          while(continuer){
             //... bout de code


          SDL_BlitSurface(fleche .....etc.);
          //tu re-blit tout ce qui est a l'ecran
          SDL_Flip(ecran);
          }


          et comme ca, plus de trainée ;)
          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2007 à 9:54:03

            Ha ouiiiiii !
            Ok j'ai compris le principe, en fait il faut effacer l'ancienne fleche en reblittant le background par dessus...

            Ca devait être trop gros pour que ca puisse me passer par la tete ^^

            +++
            Merci beaucoup.
            Teriblus !
            • Partager sur Facebook
            • Partager sur Twitter

            SDL, déplacer une surface.

            × 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