Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme avec SDL_SetAlpha()

    16 août 2006 à 0:14:38

    bonjour tout le monde :)

    vous allez pas le croire : jai encore un probleme :-°

    le probleme c'est que avec SDL_SetAlpha() quand je met n'importe quelle valeur de transparance

    au début l'image aparait transparante (la pas de probleme)
    puis l'image redevien opaque petit a petit..(la gros probleme)

    j'ai essayer de metre SDL_SetAlpha() a divers endroits, ( au début du main() quan je load les images, ou bien dans ma boucle...) rien a faire!

    mon frere a le même probleme, mais pour lui, l'image alterne périodiquement entre transparente et opaque..

    help! :euh:
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 août 2006 à 0:31:25

      Personne ne pourra t'aider si tu ne montre pas l'intégralité du code défaillant.
      • Partager sur Facebook
      • Partager sur Twitter
        16 août 2006 à 0:39:14

        redcloud=IMG_Load("gfx\\\\redclouds.bmp");
        SDL_SetColorKey(redcloud, SDL_SRCCOLORKEY, SDL_MapRGB(redcloud->format, 0, 0, 0));
        SDL_SetAlpha(redcloud, SDL_SRCALPHA, 128);


        voila c tout, jvois pas ce que ça apporte de plus mais bon...
        maitenant que je mette ça n'importe où (au debut du main(), comme dans la boucle principal de mon jeu, ou ailleur...)
        j'ai toujours le meme probleme, de semi-transparence qui se barre

        au début mon image est bien semi-transparente, puis peu a peu elle devient opaque, comme une fondue en fait
        sauf que je ne change absolument pas la variable, j'y touche meme pas!
        encore mieux, en fait j'ai pas de varible, mais comme tu peu le voir plus
        haut, je rentre directement la valeur comme argument pour la fonction
        "128);"
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          16 août 2006 à 0:55:49

          "voila c tout, jvois pas ce que ça apporte de plus mais bon... "

          On est bien d'accord, ces 3 lignes de code n'apportent strictement rien de plus, puisqu'elles sont parfaitement correctes (encore que je conseillerai plutot un gfx/redclouds.bmp que tes 4 anti-slashs, mais bon) et fournies telles quelles dans le cours, c'est bien pour ça que je te demande de poster l'intégralité du code source !
          Utilise la balise code pour inciter plus de monde a faire l'effort de lire.
          • Partager sur Facebook
          • Partager sur Twitter
            16 août 2006 à 9:16:56

            Certes mais mon code comporte des milliers de lignes réparties sur 2 fichier sources...ça m'etonnerais que y'en ai qui veulent s'amuser a chercher la petite bete la dedans!
            Et puis comme je l'ai dit mon frere a le meme probleme que moi, alors qu'il programme d'une façon bien différente, et qu'on ne s'est pas concerté avant...
            • Partager sur Facebook
            • Partager sur Twitter
              16 août 2006 à 11:12:46

              Si tu fais le choix de ne pas montrer ton code, on ne pourra pas t'aider.
              Si tu demande de l'aide, permet nous de le faire.

              Salut ! :)
              • Partager sur Facebook
              • Partager sur Twitter
                16 août 2006 à 12:07:49

                mais jveu bien montrer le reste de mon code, mais seulement j'en vois pas l'utilité, tout le reste, c'est des fonctions perso qui gerent des trajectoire de boullettes...(shoot em up)
                ya rien d'autre qui touche au surfaces...
                jveu dire, mon redcloud.bmp , jle load, jfais setalpha() et jle blit et voila c tout j'y touche plus...
                maintenant je sais pas pourquoi, la transparence varie toute seule!
                maintenant, soyez plus préci, vous voulez voir quelle partie de mon code?
                c'est construi un peu comme ça:

                #includes...

                int variables...
                int structures...
                SDL surfaces...
                déclaration des fonctions perso...

                main()
                {
                init sdl(vidéo|audio...)

                IMGload(redcloud...)
                setalpha();

                while(boucle principale du jeu)
                {
                /*fonction perso*/
                trajectoires vaisseaux();
                trajectoiresdesboullettes();
                ...
                affichage(); //blit de tout les sprites et du background


                gestion des events...
                flip();

                }
                }



                voila si vous voulez jvous détails toutes mes trajectoires... la gestion des tirs, les tests de collisions eet tout, mais bon, jveu juste éviter de vous faier chercher dans 3000 lignes... o_O
                • Partager sur Facebook
                • Partager sur Twitter
                  16 août 2006 à 12:30:10

                  On veut le Main. Point barre!

                  C'est sur que tes collisions, ba on en a rien à f**tr* (hem.. ^^ )
                  (Et dans une balise Code STP..)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 août 2006 à 12:41:32


                    int main(int argc, char *argv[])
                    {
                       
                            SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO);
                         TTF_Init();
                        ecran = SDL_SetVideoMode(320,240,32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                        SDL_WM_SetCaption("emerald wings", NULL);
                        Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 2048);
                       
                       
                       
                       Dragonst=IMG_Load("gfx\\\\Dragonstorm.bmp");
                       SDL_SetColorKey(Dragonst, SDL_SRCCOLORKEY, SDL_MapRGB(Dragonst->format, 255, 255, 255));
                       redback=IMG_Load("gfx\\\\redback.bmp");

                       /******transparence************/
                       redcloud=IMG_Load("gfx\\\\redclouds.bmp");
                       SDL_SetColorKey(redcloud, SDL_SRCCOLORKEY, SDL_MapRGB(redcloud->format, 4, 2, 4));
                       SDL_SetAlpha(redcloud, SDL_SRCALPHA, 128);
                       /***************************/


                       griffin=IMG_Load("gfx\\\\griffin3.bmp");
                        SDL_SetColorKey(griffin, SDL_SRCCOLORKEY, SDL_MapRGB(griffin->format, 255, 255, 255));   
                       gbullet=IMG_Load("gfx\\\\gbullet.bmp");
                            SDL_SetColorKey(gbullet, SDL_SRCCOLORKEY, SDL_MapRGB(gbullet->format, 0, 0, 255));
                       gargoyle=IMG_Load("gfx\\\\Gargoyle.bmp");
                       SDL_SetColorKey(gargoyle, SDL_SRCCOLORKEY, SDL_MapRGB(gargoyle->format, 255, 255,255));
                       drheart=IMG_Load("gfx\\\\DrHeart2.bmp");
                       SDL_SetColorKey(drheart, SDL_SRCCOLORKEY, SDL_MapRGB(drheart->format, 255, 255,255));
                       gargbull=IMG_Load("gfx\\\\gargbullet.bmp");
                       SDL_SetColorKey(gargbull, SDL_SRCCOLORKEY, SDL_MapRGB(gargbull->format,255, 0,0));
                       dargor=IMG_Load("gfx\\\\Dargor.bmp");
                       SDL_SetColorKey(dargor, SDL_SRCCOLORKEY, SDL_MapRGB(dargor->format,255, 255,255));
                       bossball=IMG_Load("gfx\\\\BossBall.bmp");
                       SDL_SetColorKey(bossball, SDL_SRCCOLORKEY, SDL_MapRGB(bossball->format,255, 0,0));
                       dragbullet=IMG_Load("gfx\\\\fire.bmp");
                       SDL_SetColorKey(dragbullet, SDL_SRCCOLORKEY, SDL_MapRGB(dragbullet->format,0, 0,0));
                       flame=IMG_Load("gfx\\\\flame2.bmp");
                       SDL_SetColorKey(flame, SDL_SRCCOLORKEY, SDL_MapRGB(flame->format,4, 2,4));
                       pausescreen=IMG_Load("gfx\\\\pause.bmp");
                       
                       
                       

                       
                       
                         music = Mix_LoadMUS("sfx/Emerald Sword.mid");
                       
                       
                       
                           while (continuer)
                        {
                                 
                       
                                 if(!Mix_PlayingMusic())
                        {
                         
                          Mix_PlayMusic(music, 0);
                        }
                                 
                           
                                            if ( nframe==space) {space=10; ReadLevel(level1); nframe=0; }
                                            nframe++;     
                                 
                                 
                            AddGbullet();
                            MoveGriffin();
                            MoveGbullet();
                            MoveGargbullet();
                            MoveGargoyle();
                            MoveDrHeart();
                            MoveBoss();
                            MoveBossbullet();
                            MoveBossball();
                            MoveDrHeartbullet();
                            MoveDragbullet();
                            Background();
                            Draw();
                        Ship()
                         
                             
                           
                                 
                                 
                                 
                            SDL_PollEvent(&event);
                            switch(event.type)
                            {
                                case SDL_QUIT:
                                     {
                                    continuer = 0;
                                    break;
                                    }
                            case SDL_KEYDOWN:
                                    {
                                             
                                    if(event.key.keysym.sym==SDLK_ESCAPE){Pause();}
                                    if(event.key.keysym.sym==SDLK_RETURN){Pause();}
                                    if(event.key.keysym.sym==SDLK_SPACE) {Pause();}       
                                    if(event.key.keysym.sym==SDLK_w){ToucheB=1;}
                                    if(event.key.keysym.sym==SDLK_LEFT ){ToucheGauche=1;}
                                    if(event.key.keysym.sym==SDLK_UP){ToucheUp=1;}
                                    if(event.key.keysym.sym==SDLK_RIGHT ){ToucheDroite=1;}
                                    if(event.key.keysym.sym==SDLK_DOWN )    {ToucheDown=1;}     
                                    if(event.key.keysym.sym==SDLK_LESS){  ToucheL=1;}
                                    if(event.key.keysym.sym==SDLK_c){ ToucheR=1;}
                                    break;             
                                    }       

                             case SDL_KEYUP:
                                  {
                                  if(event.key.keysym.sym==SDLK_w){ToucheB=0;}
                                    if(event.key.keysym.sym==SDLK_LEFT ){ToucheGauche=0;{Dragon.frame=3;}}
                                    if(event.key.keysym.sym==SDLK_UP ){ToucheUp=0;}
                                    if(event.key.keysym.sym==SDLK_RIGHT ){ToucheDroite=0;{Dragon.frame=3;}}
                                    if(event.key.keysym.sym==SDLK_DOWN  )   {ToucheDown=0;}   
                                    if(event.key.keysym.sym==SDLK_LESS){  ToucheL=0;{Dragon.frame=3;}}
                                    if(event.key.keysym.sym==SDLK_c){ ToucheR=0;{Dragon.frame=3;}}
                                  break;           
                                  }
                               
                           




                                   
                            }     
                                   
                            if(ToucheB==1){AddDragbullet();ToucheB=0;}
                        if(Dragon.frame==0)ToucheB=0;
                        if(Dragon.frame==6)ToucheB=0;


                                   
                                     
                           
                       



                    tempsActuel = SDL_GetTicks();
                    if (tempsActuel - tempsPrecedent > 30)
                    {
                        tempsPrecedent = tempsActuel;
                    }
                    else
                    {
                        SDL_Delay(30- (tempsActuel - tempsPrecedent));
                    }



                          SDL_Flip(ecran)
                        }


                        TTF_Quit();
                        SDL_Quit();
                       
                        return EXIT_SUCCESS;
                    }

                    voila le main
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 août 2006 à 12:50:24

                      Ba moi perso je ne vois pas de probleme (il me semble).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 août 2006 à 12:55:34

                        arf, et y'en a qui utilise du setalpha?
                        parceque on c'est mi a 2 dessus, et on a toujours pas compris
                        pourtant j'ai bien l'impression de faire comme dans le tuto...d'ailleur j'en ai trouvé un autre, et c'etait pareil
                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 août 2006 à 14:31:02

                          T'est sur que tu ne Tu l'affiche peut etre plein de fois au meme endroit sans SDL_Rect, perso, je vois pas ou est l'erreur desolé
                          • Partager sur Facebook
                          • Partager sur Twitter

                          probleme avec SDL_SetAlpha()

                          × 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