Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL_Delay(ms);

mise en pause du programme ?

Anonyme
    25 août 2006 à 19:22:30

    Bonjour amis zéros :)


    J'ai une petite question à poser :D :

    Ce que je voudrais :


    Dans mon code , Je blitte d'abord une image d'introduction.
    5 secondes après, je rentre dans la boucle principale. ^^

    Ce que je fais :




    /* Déclaration de mes variables */
    SDL_Surface *texte = NULL ;

    texte = IMG_Load("texte_depart.png");
    SDL_BlitSurface(texte, NULL, ecran, &positionMur);
    SDL_Delay(5000);

    while (continuer) {
    // bla bla bla et autres instructions
    }
    /* fin du programme */


    Résultat :



    (Je précise que ma surface écran est noire)

    L'écran est tout noire pendant 5 secondes,et puis je rentre dans la boucle principale ou je blitte le decor :(

    Donc ma question : ;)
    Mateo dit que la fonction met en pause le programme. Je croyais donc que ma surface texte allait rester blitter 5 secondes, mais non. Pourquoi ?



    edit :
    avec ce code, le résultat est le même :
    texte = IMG_Load("texte_depart.png");
     tempsPrecedent = SDL_GetTicks();
    tempsActuel = tempsPrecedent ;

    while (tempsActuel - tempsPrecedent < 5000)
    {
    SDL_BlitSurface(texte, NULL, ecran, &positionMur);
    tempsActuel = SDL_GetTicks();
    }
    • Partager sur Facebook
    • Partager sur Twitter
      25 août 2006 à 19:54:51

      Bonjour,

      je pense qu'il faut que tu rafraichisse l'affichage avec un SDL_Flip(ecran); après avoir blitté l'image.
      Amicalement Mercosuh :D
      • Partager sur Facebook
      • Partager sur Twitter
        25 août 2006 à 19:58:48

        Salut!
        Deja si tu veux que le texte apparaisse il faudra bien actualiser l'ecran! Donc SDL_Flip avant SDL_Delay ( sinon l'ecran va rester noir pendants les 5 secondes ) et puis juste avant la boucle tu "efface" le texe en blittant du noir ( puisque c'e4st la couleur de l'ecran) par dessus avec SDL_FillRect...

        Voila en esperant avoir aide ;) ;-)
        En meme temps que Mercosuh ;)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          25 août 2006 à 20:09:17

          Evidemment :'( . Sniff quel boulet :(

          Bon merci :)

          Une autre petite question tant que j'y suis :
          Ce code ne marche pas :

          CLE_P = IMG_Load("clet.jpg");
          SDL_SetColorKey(CLE_P, SDL_SRCCOLORKEY, SDL_MapRGB(CLE_P->format, 255, 0, 0));
          SDL_BlitSurface(CLE_P, NULL, ecran, &positionsouris);


          Le fond de mon image reste rouge ! :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            25 août 2006 à 20:10:46

            regarde avec paint ou autre la véritable couleur, il se peut que se soit 254,0,0 ou 255,1,1
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              25 août 2006 à 20:15:42

              Je viens de vérifier, c'est du 254 :-° .Donc je change mon code, mais il reste un peu de rouge autour de mon image ( d'autes nuances).
              Donc comment faire une image comme le zozor du cours ? (avec un rouge sans nuance ^^ )


              Celle ci, je l'avais faite avec the gimp en mettant un fond rouge, puis le calque avec mon image par dessus ;)


              Merci :)
              • Partager sur Facebook
              • Partager sur Twitter
                25 août 2006 à 20:37:16

                ton problème vient du fait qu'il y avait des pixels avec de l'alpha ce qui fait qu'ils ont été "mélangé" avec le rouge du fond.
                Passe par une image png avec fond transparent + SDL_image
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  25 août 2006 à 20:56:38

                  D'accord :)

                  Bon je termine sur ma question la plus grave : mon code fait a peu près 500 lignes (rien que dans le main)
                  Avant d'arriver a mon wait event a la fin de ma boucle principale, mon programme doit tester a peu près 350 lignes de conditions.

                  C'est ca qui le fait ramer ?


                  Je dois plus utiliser les fonctions ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    25 août 2006 à 21:21:05

                    Tout dépend ce que tu fais comme tests : des tests simples ne devraient pas faire ramer le jeu, même s'il y en à beaucoup.
                    Par contre, le blittage d'une surface est une opération qui prends un certain temps (particulièrement avec la transparence). Piste à creuser.
                    Essaies aussi d'augementer le nombre de FPS maximum dans ton jeu.

                    Sinon, diviser ton code en fonctions ne va pas faire gagner de la vitesse, mais ton code sera déjà beaucoup plus clair (pour corriger les érreurs par exemple), donc c'est tout de même une bonne chose.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      26 août 2006 à 11:04:41

                      Bon, je vais essayer d'expliquer mon code, parce que je ne vois pas omment faire des fonctios pour le simplifier.

                      1ere partie

                      : Je déclare mes variables, j'init la SDL ...

                      2eme partie

                      : Ensuite, je rentre dans la boucle principale. La, je teste l'endroit ou est le personnage.Par exemple, si le personnage est a la zone de depart, je blitte le sol, le mur au fond de la piece ...,si il est devant une table, je blitte l'image de la table
                      Donc je n'arrete pas de blitter des surfaces puisque je suis dans la boucle principale, ca pose problème non? :euh:

                      3eme partie

                      : Je teste les évenements avec SDL_WaitEvent.Fin de ma boucle. ^^

                      Je donne mon code (simplifié) ;)


                      /* ICI, je déclare toutes mes variables ######################
                      // Initialisarion de la sdl
                      //Déclaration ...

                      /* introduction -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- */

                      // J'affiche une image qui donne les instructions aux joueurs, et qui reste affichée pendant 5 secondes
                      texte = IMG_Load("texte_depart.png");
                      SDL_BlitSurface(texte, NULL, ecran, &positionMur);
                      SDL_Flip(ecran);
                      SDL_Delay(5000);

                      /* Je démarre ma boucle principale */
                      while (continuer)
                      {
                      /*--------------------------------------------------------------------------------
                       La liste des fonctions qui s'occupent de l'affichage des images pour le départ
                      --------------------------------------------------------------------------------*/


                      if (perso == DEPART) { // perso est une variable enumeration
                               
                      // BLITTAGE en masse

                      /* LA, je teste si le joueur veut se déplacer */
                      if (positionclic.x< 625 && positionclic.x > 550 &&positionclic.y < 250 && positionclic.y >50)
                       {
                                   depart_porte = 1;
                                   }         
                      if(depart_porte) {

                      perso = PORTE;
                      positionclic.x = 0 ;
                      positionclic.y = 0 ;
                      }

                      /*--------------------------------------------------------------------------------
                       La liste des fonctions qui s'occupent de l'affichage des images pour la porte
                      --------------------------------------------------------------------------------*/

                       if (perso == PORTE) {

                      // De meme
                      }     
                      /*--------------------------------------------------------------------------------
                       La liste des fonctions qui s'occupent de l'affichage des images pour la table
                      --------------------------------------------------------------------------------*/
                       

                      if (perso == TABLE) {
                      // de même
                      }
                      /*--------------------------------------------------------------------------------
                       La liste des fonctions qui s'occupent de l'affichage des images pour le premier tiroir
                      --------------------------------------------------------------------------------*/
                       
                      // demême
                      /*--------------------------------------------------------------------------------
                       La liste des fonctions qui s'occupent de l'affichage des images pour le second tiroir
                      --------------------------------------------------------------------------------*/
                       
                      // de même

                        /*\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ EVENEMENT */
                       
                        SDL_WaitEvent(&event);
                          switch(event.type)
                          {
                              case SDL_QUIT:
                                  continuer = 0;
                                  break;
                              case SDL_KEYDOWN:
                                  switch (event.key.keysym.sym)
                                  {
                                      case SDLK_KP0: /* Appui sur la touche Echap, on arrête le programme */
                                          continuer = 0;
                                          break;
                                      case SDLK_p:
                                      PREND_cle_P = Prendre_cle_P(INporte, cle_P,INptiroir);
                                     break;
                                     case SDLK_t:
                                      PREND_cle_T = Prendre_cle_T(INporte, cle_T,INptiroir);
                                     break;
                                  }
                              break;
                              case SDL_MOUSEBUTTONUP:
                                   if (event.button.button == SDL_BUTTON_RIGHT) {
                                  positionclic.x = event.button.x;
                                  positionclic.y = event.button.y;}
                                  break;
                              case SDL_MOUSEMOTION:
                                  positionsouris.x = event.motion.x;
                                  positionsouris.y = event.motion.y;
                                  break;
                                 
                          }
                       
                                   
                                   
                            SDL_Flip(ecran);
                           }
                           /* """""""""""" FERMETURE DU PROGRAMME """""""""""""""*/
                           // Je libère les surfaces, je quitte la Sdl... 
                          return EXIT_SUCCESS;
                      }




                      Je précise que quand il y a marqué de même, il y a environ 70 lignes de codes.


                      Merci d'avance :D
                      • Partager sur Facebook
                      • Partager sur Twitter

                      SDL_Delay(ms);

                      × 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