Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bouger une balle en SDL

Sujet résolu
    23 octobre 2008 à 21:31:59

    Bonjour !

    Je suis en train de créer un jeu vidéo, en SDL, où on devra bouger une balle avec les flèches du clavier. (J'ai déjà poser 2 questions pour ce même jeu, je m'en excuse mais celle-ci sera la dernière). Actuellement le joueur peut aller jusqu'à une fenêtre qui affiche le tableau. J'ai alors essayer de créer une autre boucle pour enfermer les fonctions des flèches. Le jeu me trouve des bugs disant "Duplicate case value". Après je met dans la boucle qui renferme la fonction qui permet d'accéder au tableau ces instructions. La balle ne bouge pas. J'ai essayé de mettre des ajouts (Flip Ecran, Blit, Free Surface) partout mais cela n'a pas marché !

    while (continuer == 1)/*Boucle du menu TF*/{
                   SDL_WaitEvent(&event);
                   switch(event.type)
                   {
                       case SDL_QUIT:
                       continuer = 1;
                       break;
                       case SDL_KEYDOWN:
               switch (event.key.keysym.sym)//TF
            {
    case SDLK_ESCAPE://TF
    continuer = 0;
    break;//TF
    
    case SDLK_KP1:
    laligne(ecran);
    break;
    
    case SDLK_UP:
    positionballe.y+10;
    break;
                }//TF
    }
    
        }//
    


    après j'ai mis dans la fonction qui permet de changer d'écran et d'afficher la balle une boucle avec les instructions nécessaires, même résultat, échec !

    void laligne(SDL_Surface* ecran)
    {
      SDL_Rect positionMenu, positionballe/*balle*/;
    SDL_Surface *menu = NULL, *balle/*balle*/ = NULL;
    
    SDL_Event event;
    
        int continuer = 1, choix = 1;
    
     menu = IMG_Load("laligne.jpg");
    balle = IMG_Load("balle2.jpg");/*balle*/
    
     positionMenu.x = 0;
        positionMenu.y = 0;
        positionballe.x = 151;/*balle*/
        positionballe.y = 57;/*balle*/
    
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
            SDL_SetColorKey(balle, SDL_SRCCOLORKEY, SDL_MapRGB(balle->format, 255, 255, 255));/*balle*/
            SDL_BlitSurface(balle, NULL, ecran, &positionballe);/*balle*/
    SDL_Flip(ecran);
        while (continuer == 1)/*Boucle du menu TF*/{
                   SDL_WaitEvent(&event);
                   switch(event.type)
                   {
                       case SDL_QUIT:
                       continuer = 1;
                       break;
                       case SDL_KEYDOWN:
               switch (event.key.keysym.sym)//TF
            {
    case SDLK_ESCAPE://TF
    continuer = 0;
    break;//TF
    
    case SDLK_DOWN:
    positionballe.y+30;
    break;
    
                }//TF
    }
    
    
    // Effacement de l'écran
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
            SDL_SetColorKey(balle, SDL_SRCCOLORKEY, SDL_MapRGB(balle->format, 255, 255, 255));/*balle*/
            SDL_BlitSurface(balle, NULL, ecran, &positionballe);/*balle*/
            SDL_Flip(ecran);
        }
            SDL_FreeSurface(balle);
    
    
    }
    

    J'ai bien sur vérifié chacune de mes instructions mais en vain cela ne marche pas !

    Avez-vous une solution à ce problème bien ennuyeux ?

    Merci beaucoup de votre compréhension et de votre aide !

    louischou246 (un programmeur dans bien embêté)
    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2008 à 10:38:29

      Bonjour,

      je ne sais pas si ton problème vient de là mais quand tu mets :

      Citation : louischou246

      case SDLK_UP:
      positionballe.y+10;
      break;
      


      je suppose que tu veux ajouter 10 à "positionballe.y" et mettre cette nouvelle valeur dans "positionballe.y". La syntaxe correcte est
      positionballe.y += 10;
      
      Vérifie si tu n'as pas oublié le "+=" ailleur.
      • Partager sur Facebook
      • Partager sur Twitter
      Si ma réponse vous a aidé, n'hésitez pas à mettre un "+1" | N'oubliez pas de marquez le sujet en "Résolu"

      Bouger une balle en SDL

      × 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