Partage
  • Partager sur Facebook
  • Partager sur Twitter

class/struct +SDL

pas de warning mais erreur quand meme

    23 juin 2007 à 19:12:58

    j'ai eu l'idée (un peu folle) de definir et utiliser les surface graces à des class et des structures
    voici le main
    #include"colisionSDL.h"
    #include"racSDL/couleur.h"
    //j'y ai définit mes couleur grace à des defines
    //ces dossier on une securité (si on les appelle x fois de suite) elle sera inclu 1 fois
    //donc je les mets "au cas où" ^^
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    int main(int argc,char *argv[])
    {bouton principal,rec; //utilisation de ma structure.
    SDL_Event event;
    SDL_Init(SDL_INIT_VIDEO);
    principal.definirFenetre(600,600);//fenetre 600 x 600 pixels parametre facultatif pour le flag
    rec.definirPosition();//par defaut x=0 y=0
    rec.boutonSurface(100,100);//2 1er parametre obligatoire (taille du bouton)

    rec.colorerBouton(Rose(180));//(**le bug vien de cette fonction**)

    principal.colorerEcran(Blanc(180));//on colore l'ecran

    while(1)//boucle "infinie"
    {SDL_WaitEvent(&event);
    if(event.type==SDL_QUIT)
    {goto fin;}//on sort de la boucle
    principal.colorerEcran(Blanc(180));//on colore l'ecran en gris 180,180,180
    principal.miseAjour();//mise à jour de l'ecran
    }
    fin://sortie de boucle
    rec.effacer();//on efface la surface
    principal.effacerEcran();//on efface l'ecran

    SDL_Quit();//ouf c'est la fin
        return EXIT_SUCCESS;
    }


    la fenetre quitte precipitemment si je met rec.colorerBouton(Rose(180));
    et il y a un liker error si je ne met pas int argc,char *argv[] a la fonction main.

    :p ca va c'est pas en cor lourd j'espere :p

    prototype de colorerBouton
    void colorerBouton(Uint8 R,Uint8 V,Uint8 B);



    le reste de cette fonction
    void bouton::colorerBouton(Uint8 R,Uint8 V,Uint8 B)
    {m_r=R;m_v=V;m_b=B;
    SDL_FillRect(m_surface, NULL, SDL_MapRGB(m_ecran->format,m_r,m_v,m_b));}


    si vous voulez plus de choses demander moi
    ( :lol: je suis pret à TOUT :lol: )
    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2007 à 20:02:52

      :o aucune réponse...

      dite moi si il y quelque chose mal dit

      ou si il manque des informations... :euh:

      merci de me répondre :D
      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2007 à 20:39:04

        Le débugger te sort quoi? Si il n'y a aucune erreur mais que sa ne veut pas compiler sa doit venir d'une erreur de linkage ou d'une ddl manquante.
        • Partager sur Facebook
        • Partager sur Twitter
          25 juin 2007 à 11:11:25

          en fait il n'y a aucun probleme mais la fenetre se ferme immediatement... :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            25 juin 2007 à 11:45:42

            Si c'est ça, le bug doit venir d'une erreur de manipulation de la SDL mais pas de ta classe elle même. Peut tu montre la définition de ta classe ansi que les méthodes definirPosition, boutonSurface, colorerBouton et la fonction Rose().
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              25 juin 2007 à 11:53:42

              c'est quoi ton GOTO horrible ?
              Tu connnais break ?
              • Partager sur Facebook
              • Partager sur Twitter
                25 juin 2007 à 13:41:50

                je prefere goto ^^ (mais le probleme n'est pas la ^^ et break permet il de quitter une boucle?)

                pour ma class et les fefines:

                "racSDL/couleur.h"
                #ifndef RAC_COULEUR_H
                #define RAC_COULEUR_H
                //---------------------------creation automatique de couleur--------------------
                //n'oubliez pas les majuscules au début!!
                #define Bleu(rvb) 0,0,rvb
                #define Vert(rvb) 0,rvb,0
                #define Rouge(rvb) rvb,0,0
                #define Blanc(rvb) rvb,rvb,rvb //va du noir au blanc
                #define Rose(rvb) rvb,0,rvb //va du violet au rose
                #define RV(rvb)  rvb,rvb,0 //pas de couleur exacte etrange...
                #define VB(rvb) 0,rvb,rvb //un bleu
                #define RVB(r,v,b) r,v,b // le truc classique
                #endif


                bouton.h
                #include "SDL/SDL.h"
                #include <SDL/SDL_image.h>


                class bouton
                {public:

                void colorerEcran(Uint8 r,Uint8 v,Uint8 b);//cette fonction marche tres bien
                void definirFenetre(long largeur,long hauteur,Uint32 flags=SDL_HWSURFACE);
                //cette fonction marche tres bien
                void colorerBouton(Uint8 R,Uint8 V,Uint8 B);//**ERREUR**
                void definirPosition(long x=0,long y=0);//definit positionSurface et image

                void defCoord(long x,long y=0);//juste surface
                void defCoordImage(long x=0,long y=0);//juste image

                void boutonSurface(long largeur,long hauteur,Uint32 flags=SDL_HWSURFACE,
                int depth=0,Uint32 Rmask=0, Uint32 Gmask=0, Uint32 Bmask=0, Uint32 Amask=0);

                void boutonImage(const char *fichier);//nom de l'image
                void blitSurface();void blitImage();void blit();//non testé

                void effacerEcran();void effacer();
                //effacerEcran seulement avec la variable "principale" bref effacez pas l'ecran 2x^^

                long xMin();long xMax();//terminé non testé
                long yMin();long yMax();//terminé non testé

                long xMinImage();long xMaxImage();//terminé non testé
                long yMinImage();long yMaxImage();//terminé non testé

                void miseAjour();//terminé non testé


                private:
                Uint8 m_r,m_v,m_b;
                long m_abs, m_ord, m_x, m_y,m_xImage,m_yImage;
                SDL_Rect m_position, m_positionImage;
                SDL_Surface *m_ecran,*m_surface,*m_surfaceImage;
                bool m_Image;

                };


                le cpp bouton.cpp
                //structure bouton
                void bouton::definirFenetre(long largeur,long hauteur,Uint32 flags)
                {m_ecran= SDL_SetVideoMode(largeur,hauteur, 32,flags);}

                void bouton::colorerEcran(Uint8 r,Uint8 v,Uint8 b)
                {SDL_FillRect(m_ecran, NULL, SDL_MapRGB(m_ecran->format,r,v,b));}

                void bouton::effacerEcran()
                {SDL_FreeSurface(m_ecran);}

                void bouton::effacer()
                {SDL_FreeSurface(m_surface);SDL_FreeSurface(m_surfaceImage);}

                void bouton::miseAjour()
                {SDL_Flip(m_ecran);}

                //permet de retourner dans le main l'emplacement de la surface
                long bouton::xMin(){return m_abs-1;}//retourne x minimum
                long bouton::yMin(){return m_ord-1;}//retourne y minimum
                long bouton::xMax(){return m_abs+m_x-1;}//maximum
                long bouton::yMax(){return m_ord+m_y-1;}//maximum

                long bouton::xMinImage(){return m_xImage-1;}
                long bouton::xMaxImage(){return m_surfaceImage->h-1;}
                long bouton::yMinImage(){return m_yImage-1;}
                long bouton::yMaxImage(){return m_surfaceImage->w-1;}
                //fin structure bouton


                et bouton2.cpp


                void bouton::colorerBouton(Uint8 R,Uint8 V,Uint8 B)//**erreur**
                {m_r=R;m_v=V;m_b=B;//on stock les couleurs de la surfaces
                SDL_FillRect(m_surface, NULL, SDL_MapRGB(m_ecran->format,m_r,m_v,m_b));}
                //il existe une fonction dans racSDL/couleur.h RVB(r,v,b) à mettre dans les()

                void bouton::definirPosition(long x,long y)
                {m_position.x=x;m_position.y=y;//position de la surface
                m_positionImage.x=x;m_positionImage.y=y;//position de l'image
                m_abs=x,m_ord=y;//on stock les coordonnées de l'image
                m_xImage=x,m_yImage=y;}

                void bouton::defCoord(long x,long y)
                {m_position.x=x;m_position.y=y;
                m_abs=x;m_ord=y;}//position de la surface

                void bouton::defCoordImage(long x,long y)
                {m_positionImage.x=x,m_positionImage.y=y;
                m_xImage=x;m_yImage=y;}//position de l'image

                void bouton::boutonSurface(long largeur,long hauteur,Uint32 flags,int depth,
                Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)
                {
                m_x=largeur;m_y=hauteur;
                m_surface = SDL_CreateRGBSurface(flags,largeur,hauteur,depth,Rmask,Gmask,Bmask,Amask);
                }//seul les deux premier sont obligatoire largeur,hauteur de la surface

                void bouton::boutonImage(const char *fichier)
                {m_surfaceImage = IMG_Load(fichier);
                }//on charge l'image

                void bouton::blitSurface()//juste la surface uni
                {if(m_surface!=NULL)//securité
                SDL_BlitSurface(m_surface,NULL,m_ecran,&m_position);
                }

                void bouton::blitImage()//juste l'image
                {if(m_surfaceImage!=NULL)//securité
                SDL_BlitSurface(m_surfaceImage,NULL,m_ecran,&m_positionImage);
                }

                void bouton::blit()//blitte image et surface uni
                {if(m_surface!=NULL){
                SDL_BlitSurface(m_surface,NULL,m_ecran,&m_position);}
                if(m_surfaceImage!=NULL){
                SDL_BlitSurface(m_surfaceImage,NULL,m_ecran,&m_positionImage);}}



                bien sur j'ai mis les includes (sinon erreur du compilo ^^ )

                • Partager sur Facebook
                • Partager sur Twitter
                  26 juin 2007 à 20:00:28

                  bon... UP

                  je ne voie toujours pas mon erreur...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  class/struct +SDL

                  × 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