Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une image par dessus une autre

Bliter par dessus en somme.

Sujet résolu
    8 juin 2006 à 21:40:17

    Bonsoir !!

    Escusez moi de faire pleins de nouveaux posts en ces temps.


    J'aimerai savoir comment faire pour qu'une image superpose une autre image.

    Mon cas est celui ci :

    J'ai un personnage.
    J'ai une maison.

    Les deux sont blités.
    Je bouge le perso avec les fleches, mais la maison reste à sa place.

    Quand je place mon perso sur la maison, mon perso disparait SOUS la maison, qui le cache.
    J'aimerai au contraire que mon perso puisse passer sur la maison, pour qu'on le voit dessus.

    Ca parait bete, mais je comprend pas comment faire o_O

    Désolé si le probleme a deja été posé.
    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 21:45:14

      Il suffit de blitter le personnage Après la maison.
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 21:47:40

        Ba justement non !
        Regarde mon code si tu veux :


        #include <stdlib.h>
        #include <stdio.h>
        #include "SDL.h"


        /*

        Vert des maisons : 0,128,0


        */

        // --------------- Etape 1 ---------------
        // Les variables
        // ---------------------------------------
           


        SDL_Surface *ecran = NULL, *perso_haut = NULL , *perso_bas = NULL , *perso_droite = NULL, *perso_gauche = NULL
        , *actuel = NULL ,*ecurie = NULL ;

        SDL_Event event; /* La variable contenant l'évènement */
        SDL_Rect positionActuel;
        SDL_Rect positionEcurie;



        // --------------- Etape 1.5 ---------------
        // Les variables pour le programme
        // ---------------------------------------


        int continuer = 1 ;

        int main(int argc, char *argv[])
        {
           

        // --------------- Etape 2 ---------------
        // On initialise la SDL
        // ---------------------------------------

            SDL_Init(SDL_INIT_VIDEO);
            ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
           
            SDL_WM_SetCaption("Mheu Mheu : Un jeu très vache !", NULL);
           

           
        // --------------- Etape 3 ---------------
        // On charge les images dont on a besoin
        // ---------------------------------------
         

            /* Les différentes positions */
            perso_haut = SDL_LoadBMP("perso_haut.bmp");
             SDL_SetColorKey(perso_haut, SDL_SRCCOLORKEY, SDL_MapRGB(perso_haut->format,255, 255, 255));
           
             
            perso_bas = SDL_LoadBMP("perso_bas.bmp");
            SDL_SetColorKey(perso_bas, SDL_SRCCOLORKEY, SDL_MapRGB(perso_bas->format,255, 255, 255));
               
           
            perso_gauche = SDL_LoadBMP("perso_gauche.bmp");
            SDL_SetColorKey(perso_gauche, SDL_SRCCOLORKEY, SDL_MapRGB(perso_gauche->format,255, 255, 255));
               
           
            perso_droite = SDL_LoadBMP("perso_droite.bmp");
            SDL_SetColorKey(perso_droite, SDL_SRCCOLORKEY, SDL_MapRGB(perso_droite->format,255, 255, 255));
             
           
            ecurie = SDL_LoadBMP("ecurie.bmp");
            SDL_SetColorKey(ecurie, SDL_SRCCOLORKEY, SDL_MapRGB(ecurie->format,0,128,0));


            actuel = perso_droite ;

           
        // --------------- Etape 4 ---------------
        // Gestion des evenements
        // ---------------------------------------

            positionActuel.x = 300;
            positionActuel.y = 400;
             
            positionEcurie.x = 400;
            positionEcurie.y = 300;
           

           
           
        SDL_EnableKeyRepeat(8 ,8); //Pour charger plus vite en appuyant sur la touche 

        while (continuer) /* TANT QUE la variable ne vaut pas 0 */
            {
                SDL_WaitEvent(&event); /* On attend un évènement qu'on récupère dans event */
                switch(event.type) /* On teste le type d'évènement */
                {
                    case SDL_QUIT: /* Si c'est un évènement QUITTER */
                        continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
                        break;
                       
                        case SDL_KEYDOWN:
                switch(event.key.keysym.sym)
                {
                    case SDLK_UP: // Flèche haut--
                        positionActuel.y -= 4 ;
                        actuel = perso_haut;
                        break;
                    case SDLK_DOWN: // Flèche bas++
                        positionActuel.y += 4 ;
                        actuel = perso_bas;
                        break;
                    case SDLK_RIGHT: // Flèche droite++
                        positionActuel.x += 4 ;
                        actuel = perso_droite;
                        break;
                    case SDLK_LEFT: // Flèche gauche--
                        positionActuel.x -= 4 ;
                        actuel = perso_gauche;
                        break;
                       
                     
                }
                break;
         

                }
               
               
        // --------------- Etape 5.5 ---------------------
        // On BLIT les images qu'il faut !
        // ---------------------------------------------

               

                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 54, 184, 44)); /* On efface l'écran */
                SDL_BlitSurface(actuel, NULL, ecran, &positionActuel);
                SDL_BlitSurface(ecurie, NULL, ecran, &positionEcurie);
               

                 SDL_Flip(ecran); // on met à jour.
               

               

            }//While


        // --------------- Etape 5 ---------------------
        // On libere de l'espace
        // ---------------------------------------------


            SDL_FreeSurface(actuel);
            SDL_FreeSurface(perso_gauche);
            SDL_FreeSurface(perso_droite);
            SDL_FreeSurface(perso_haut);
            SDL_FreeSurface(perso_bas);
            SDL_FreeSurface(ecurie);

            SDL_Quit();

            return EXIT_SUCCESS;


            }
           
        // --------------- Etape 6 ---------------------
        // Les fonctions du programme
        // ---------------------------------------------









        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2006 à 21:54:22

          Pourquoi n'essaye tu pas ce qu'on te propose ?
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 54, 184, 44)); /* On efface l'écran */
          SDL_BlitSurface(actuel, NULL, ecran, &positionActuel);
          SDL_BlitSurface(ecurie, NULL, ecran, &positionEcurie);

          Tu blitte l'ecurie sur le perso.. :( . Il faut faire:
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 54, 184, 44)); /* On efface l'écran */
          SDL_BlitSurface(ecurie, NULL, ecran, &positionEcurie);
          SDL_BlitSurface(actuel, NULL, ecran, &positionActuel);


          On blitte le perso après la maison !
          • Partager sur Facebook
          • Partager sur Twitter
            8 juin 2006 à 21:56:27

            Ba oui c'est ce que j'ai fait o_O
            Je vois pas ce que tu veux dire !
            • Partager sur Facebook
            • Partager sur Twitter
              8 juin 2006 à 21:59:26

              Ta maison, c'est ecurie je suppose ?
              Le probleme est que tu blitte le personnage et ensuite l'ecurie !!! Il y a un probleme !

              Il faut blitter l'ecurie PUIS, le personnage !!
              • Partager sur Facebook
              • Partager sur Twitter
                8 juin 2006 à 22:02:19

                Ha merde !
                Je suis quand meme un sacré boulet :D
                Escusez moi totalement !
                Et ca marche nikel !!


                (encore désolé ! )
                Et je pensais pas dans le bon sens en fait !
                Encore pardon ,et 1000 fois merci :)
                • Partager sur Facebook
                • Partager sur Twitter

                Une image par dessus une autre

                × 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