Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme assignement des surfaces

Sujet résolu
    26 avril 2006 à 14:00:26

    Salut a tous,

    je suis en train de créer un jeu qui ressemble aux vieux mario d'autres fois et je rencontre un problème avec mes surfaces sous SDL :

    Pour mon jeu j'ai d'abord due créer une Structure nommée Element dans laquelle je déclrare toutes mes surfaces pour mon jeu :
    typedef struct Element Element;
       struct Element
       {
              //on initialise les surfaces
             SDL_Surface *ecran , *MarioG , *MarioD , *Ciel  , *Sol , *Bloc[NOMBRE_BLOC_MAX] , *Nuage[NOMBRE_NUAGE_MAX] , *Monstre[NOMBRE_MONSTRE_MAX] , *FondNoir , *GameOver ;
       
             //on initialise les positions
             SDL_Rect positionMarioG;
             SDL_Rect positionMarioD;
             SDL_Rect positionCiel;
             SDL_Rect positionSol;
             SDL_Rect positionBloc[NOMBRE_BLOC_MAX];
             SDL_Rect positionMonstre[NOMBRE_MONSTRE_MAX];
             SDL_Rect positionNuage[NOMBRE_NUAGE_MAX];
             SDL_Rect positionGameOver;
       
             //variables pour divers fonction du programme
             int continuer, page, jeu, sens, saut, continuer_balade_gameover;
             int NiveauActuel;
             int continuer_balade_nuage[NOMBRE_NUAGE_MAX], continuer_balade_monstre[NOMBRE_MONSTRE_MAX];
             int limite_gauche_montsre[NOMBRE_MONSTRE_MAX], limite_droite_monstre[NOMBRE_MONSTRE_MAX];
             int limite_gauche_nuage[NOMBRE_NUAGE_MAX], limite_droite_nuage[NOMBRE_NUAGE_MAX];         
        };


    Ensuite je créer une variable nommée Niveau de type Element

    Element Niveau;


    Et quand je veut initialiser les sous variables de cette dernière cela marche pour tout sauf pour les surfaces : le code de la fonction qui initialise est le suivant
    void POSITIONEMENT_NIVEAU(Element *Niveau, int niveau)
    {
         switch(niveau)
         {
                       case 1:
                             //on charge les images
                             Niveau->MarioD = IMG_Load("image/mariodroite.gif");
                             SDL_SetColorKey(Niveau->MarioD, SDL_SRCCOLORKEY, SDL_MapRGB(Niveau->MarioD->format, 0, 0, 255));//on rend le fond de l'image transparent
                             Niveau->MarioG = IMG_Load("image/mariogauche.gif");
                             SDL_SetColorKey(Niveau->MarioG, SDL_SRCCOLORKEY, SDL_MapRGB(Niveau->MarioG->format, 0, 0, 255));//idem
                             Niveau->Ciel = IMG_Load("image/fond.bmp");
                             Niveau->Sol = IMG_Load("image/sol.bmp");
                             Niveau->Bloc[0] = IMG_Load("image/Bloc.bmp");
                             SDL_SetColorKey(Niveau->Bloc[0], SDL_SRCCOLORKEY, SDL_MapRGB(Niveau->Bloc[0]->format, 0, 0, 255));//idem
                             Niveau->Monstre[0] = IMG_Load("image/monstre.gif");
                             SDL_SetColorKey(Niveau->Monstre[0], SDL_SRCCOLORKEY, SDL_MapRGB(Niveau->Monstre[0]->format, 0, 0, 255));//idem
                             Niveau->Nuage[0] = IMG_Load("image/nuage.bmp");
                             SDL_SetColorKey(Niveau->Nuage[0], SDL_SRCCOLORKEY, SDL_MapRGB(Niveau->Nuage[0]->format, 0, 0, 255));//idem
                             Niveau->GameOver = IMG_Load("image/gameover.bmp");
                             
                            //on positionne les differentes image dans le decor
                            Niveau->positionBloc[0].x = 360;
                            Niveau->positionBloc[0].y = Niveau->Ciel->h - Niveau->Bloc[0]->h;
                            Niveau->positionMarioD.x = 0;
                            Niveau->positionMarioD.y = Niveau->Ciel->h - Niveau->MarioD->h;
                            Niveau->positionMarioG.x = 0;
                            Niveau->positionMarioG.y = Niveau->Ciel->h - Niveau->MarioD->h;
                            Niveau->positionCiel.x = 0;
                            Niveau->positionCiel.y = 0;   
                            Niveau->positionSol.x = 0;
                            Niveau->positionSol.y = 567;
                            Niveau->positionMonstre[0].x = Niveau->Ciel->w - Niveau->Monstre[0]->w;
                            Niveau->positionMonstre[0].y = Niveau->Ciel->h - Niveau->Monstre[0]->h;
                           
                            Niveau->continuer = 1;
                            Niveau->jeu = 1;
                            Niveau->continuer_balade_monstre = 2;
                            Niveau->continuer_balade_nuage = 2;
                            Niveau->sens = 1;
                            Niveau->limite_gauche_monstre[0] = 40;
                            Niveau->limite_droite_monstre[0] = 750;
                            Niveau->limite_gauche_nuage[0] = 0;
                            Niveau->limite_droite_nuage[0] = 750;
                           
                            break;
                       case 2:.....


    Lorsqu'il arrive a la ligne qui attribut une images a chaque surface le compilateur me dit :

    Citation : Compilateur

    In function `POSITIONEMENT_NIVEAU':
    [Warning] assignment makes pointer from integer without a cast
    ... autant de fois qu'il y a de surfaces



    Quelqu'un aurai-t-il la clé de mon problème ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      26 avril 2006 à 15:13:58

      Je dois avouer que je n'ai pas tout compris.
      Essaie de relire ton code en entier pour voir ce qui ne va pas.
      • Partager sur Facebook
      • Partager sur Twitter
        26 avril 2006 à 16:36:26

        Qu'est ce que tu na pas compris mon explication ou la raison pour laquelle sa plante ??
        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2006 à 11:58:46

          Personne n'a de solution s'il vous plait ???
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2006 à 12:00:58

            Montre nous le code qui appelle la fonction.
            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2006 à 12:13:10

              Ce n'est pas une bonne idée les deux variables qui ont le même nom à la majuscule près...
              • Partager sur Facebook
              • Partager sur Twitter
                29 avril 2006 à 13:13:07

                Citation : Florent28

                Montre nous le code qui appelle la fonction.



                le code qui appelle la fonction il est tout simple c'est le suivant :
                POSITIONEMENT_NIVEAU(&Niveau,Niveau.NiveauActuel);


                Niveau.NiveauActuel valant 1
                • Partager sur Facebook
                • Partager sur Twitter
                  29 avril 2006 à 13:24:15

                  Niveau->MarioD = IMG_Load("image/mariodroite.gif");

                  et

                  Element Niveau;

                  ... Tu déclare une structure normale mais tu l'appelle comme un pointeur :) donc plutot:

                  Niveau.MarioD = IMG_Load("image/mariodroite.gif");

                  Pareil pour les autres :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 avril 2006 à 17:49:42

                    Bas non puisque je fait cette operation dans une fonction évidement que je vais traiter sa avec un pointeur c'est obliger
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Probleme assignement des surfaces

                    × 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