Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] faire attaquer un sprite

ça va trop vite ><

    18 avril 2006 à 22:13:14

    bonjour!
    je vous explique le probleme:
    j'ai voulu creer un evenement qui ferait attaquer mon petit sprite de zelda.
    J'ai donc ajouter au tableau zelda[] qui contenait déja HAUT,BAS,GAUCHE et DROITE les enumerations DATK1 (pour DroiteAttaque1),DATK2 et DATK3 (pour les autres directions,on verra plus tard ^^)
    j'ai donc fait cette boucle la:


        while(continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                continuer = 0;
                break;
                case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_UP:
                    zeldaActuel = zelda[HAUT];
                    position.y -= TAILLE_BLOC;
                    break;
                    case SDLK_DOWN:
                    zeldaActuel = zelda[BAS];
                    position.y += TAILLE_BLOC;
                    break;
                    case SDLK_LEFT:
                    zeldaActuel = zelda[GAUCHE];
                    position.x -= TAILLE_BLOC;
                    break;
                    case SDLK_RIGHT:
                    zeldaActuel = zelda[DROITE];
                    position.x += TAILLE_BLOC;
                    break;

                    case SDLK_RETURN:
                    if (zeldaActuel == zelda[DROITE])
                    {
                        zeldaActuel = zelda[HATK1];
                        zeldaActuel = zelda[HATK2];
                        zeldaActuel = zelda[HATK3];
                        zeldaActuel = zelda[DROITE];
                    }
                    break;
                }
            }


    mais,evidemment,ça va tellement vite qu'a mes yeux,zeldaActuel vaut tout le temps zelda[DROITE]...
    j'ai essayé de glisser des sleep(100) entre chaque image,mais ça me bloque entierement le programme...
    bref,z'auriez-vous pas une petite idée pour m'aider à temporiser tout ça? ^^
    merci d'avance!

    EDIT : Ne faites pas attention au HATK au lieu de DATK,petite erreur de ma part qui n'a aucune incidence ^^
    • Partager sur Facebook
    • Partager sur Twitter
      18 avril 2006 à 22:31:01

      avec sdl_getTicks je crois.
      ca te donne le nombre de millisecondes écoulées depuit le démarrage du prog.
      Donc tu le stockes au début de chauqe boucle, a la fin, tu soustraits les deux et tu obtiens le temps que ta boucle a mis a s'exécuter.
      Si ce temps est inférieur a par exemple 200ms, tu fais SDL_Delay(200 - resultatdetasoustraction)!
      Enfin je ^pense que ca donne ca en théorie ^^
      • Partager sur Facebook
      • Partager sur Twitter
        18 avril 2006 à 22:37:50

        Salut

        deja mais un "SDL_PollEvent" et pas SDL_WaitEvent.

        pour le temps j'ai utilisé SDL_GetTicks();


        while(continuer)
        {
           int time;
           time = SDL_GetTicks();
             
           //tes fonctions

           now = SDL_GetTicks();
           while(i)
           {
              if (now >= time + 5)
              {
                 i=0;
              }
              now = SDL_GetTicks();
           }
        }



        Sa marche mais je suis pas un pros en C.
        • Partager sur Facebook
        • Partager sur Twitter
          18 avril 2006 à 22:45:44

          Salut!
          heu...je vois pas trop comment utiliser SDL_GetTicks,je le stocke dans une variable?
          je fais ça?


                          case SDLK_RETURN:
                          temps1 = SDL_GetTicks;
                          if (zeldaActuel == zelda[DROITE])
                          {
                              zeldaActuel = zelda[HATK1];
                              zeldaActuel = zelda[HATK2];
                              zeldaActuel = zelda[HATK3];
                              zeldaActuel = zelda[DROITE];
                              temps2 = SDL_GetTicks;
                              tempsTotal = temps2 - temps1;
                          }
                          break;
                      }
                  }


          heu...en fait je comprends pas trop pourquoi calculer la duréée de la boucle :p
          J'ai essayer de faire juste SDL_Delay(200) mais ça fait comme sleep,ça me bloque entierement le programme...
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            19 avril 2006 à 8:03:10

            Ben en fait entre chaque mouvement, tu met une boucle qui dure 5 secondes (à ce sujet, autant mettre SDL_Delay(5000);, ça attend 5000 ms, soit 5 secondes), comme ça tu verras bien (tu peux changer, 5 secndes c'est beaucoup)
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2006 à 13:03:03

              ah d'accord!
              j'avais pas pensé a une boucle...
              désolé pour la réponse tardive,mais merci beaucoup,je vais tester tout de suite ! :)
              • Partager sur Facebook
              • Partager sur Twitter

              [SDL] faire attaquer un sprite

              × 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