Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Problème de timer ?

Sujet résolu
Anonyme
    12 mai 2008 à 16:49:29

    Bonjour, je crée un mini-jeu en C++ avec la SDL. ^^
    Je n'ai eu aucun problème jusqu'à maintenant, mais il faut que les ennemis aillent vers le personnage ! :o
    Au début : j'ai voulut faire ça :
    while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                             continuer = 0;
                        case SDLK_UP:
                            Perso.avancer(1);
                            break;
                        case SDLK_DOWN:
                            Perso.avancer(2);
                            break;
                        case SDLK_LEFT:
                            Perso.avancer(3);
                            break;
                        case SDLK_RIGHT:
                            Perso.avancer(4);
                            break;
                    }
                    break;
            }
            
            // Rafraichissement de l'écran //
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            Perso.refresh();
            E.refresh();
            SDL_Flip(ecran);
            
            // Les ennemis avancent //
            E.allerVersPerso();
            
        }
    

    La fonction allerVersPerso() permet a l'ennemi de se diriger vers le personnage;
    Mais je n'avais pas vu le SDL_WaitEvent(&event). Ceci met en pause le programme jusqu'à un évent.
    Mais moi je veut que les ennemis se déplacent même quand il n'y a pas d'évent ! :(

    J'ai donc eu une super idée ! Le TIMER !

    Hop en 2secondes c'est fait :-°
    La boucle while(continuer) n'a pas changé, j'ai juste ajouté une fonction et modifier une autre :D
    La fonction allerVersPerso() est devenue allerVersPerso2() et la fonction allerVersPerso() appelle le timer !
    Je vous laisse voir :
    void Ennemi::allerVersPerso()
    {
         timer = SDL_AddTimer(30, Ennemi::allerVersPerso2, NULL);
    }
    
    void Ennemi::allerVersPerso2(Uint32 intervalle)
    {
         while(continuer)
         {
             if ( persoY < positionEnnemi.y )
             {
                  avancer(1);
             }
             else if ( persoY > positionEnnemi.y )
             {
                  avancer(2);
             }
             else if ( persoX < positionEnnemi.x )
             {
                  avancer(3);
             }
             else if ( persoX > positionEnnemi.x )
             {
                  avancer(4);
             }
         }
    }
    


    Mais j'ai une horrible erreur de compilation sur cette ligne :
    timer = SDL_AddTimer(30, Ennemi::allerVersPerso2, NULL);
    avec comme info :
    argument of type `void (Ennemi::)(Uint32)' does not match `Uint32 (*)(Uint32, void*)

    Depuis je déprime !! :'(
    Aidez moi !!
    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2008 à 20:43:34

      1) SDL_Poll_event(je crois) permet de ne pas attendre un événement pour les animes et déplacements
      (cour de m@théo)

      timer = SDL_AddTimer(30, Ennemi::allerVersPerso2, NULL);

      allerVersPerso2 attend un Uint32 et tu n'as rien mis ;)
      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2008 à 20:49:53

        la réponse se trouve dans le tuto C

        (et je me demande s'il ne faut pas passer par une fonction libre (ou static))
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 mai 2008 à 20:54:59

          Merci neuneutrinos !! Avec SDL_PollEvent ça marche !!
          • Partager sur Facebook
          • Partager sur Twitter

          [SDL] Problème de timer ?

          × 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