Bonjour,


Je vous expose mon probleme :

Je voudrai mettre un tableau 2D de SDL_Surface* en variable de class afin que chaque instance puisse y acceder.

Seulement, je n'y arrive pas

J'ai regarder dans la FAQ, j'arrive a faire comme l'exemple mais cet exemple ne traite que d'une simple variable de type int.

Mon probleme ne s'arrete pas la. J'ai besoins d'utiliser des variable temporaire afin de correctement charger mon tableau. J'ai aussi besoins d'appeler bon nombre de fonction.


Or, ce type d'initialisation de variable de class est nouveau pour moi. J'ai deja essayer, mais cela ne marchait pas
(expected constructor, destructor, or type conversion before '=' token)

Mais bon, je vois a peu pres d'ou vient cette erreur. Non, ce qui me bloqie vraiment, c'est vraiment la marche a suivre.

Voila la declaration de la variable static :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
class Asteroid
{
    public:
 
        /* Methode */
 
        static SDL_Surface* RessourceSprite[4][135][29];
 
    protected:
 
        /* attribut */
};
Et voici la fonction qui se chargait d'initialiser RessourceSprite avant que je ne decide de la mettre en variable de class :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
void CreationListeAnimationAsteroid(SDL_Surface* RessourceSprite[4][135][29])
{
    /* Cette SDL_Surface servira juste a mettre les bpp des image chargé
       au meme niveau que celui de l'ecran */
    SDL_Surface *Temporaire = NULL;
 
 
 
    /* On commence par les sprite des asteroids */
 
    /* Variables utilisées juste pour le sprite "Asteroid" */
    SDL_Surface *Decoupage = NULL;
    SDL_Rect positionSprite;
        positionSprite.w = 80;
        positionSprite.h = 80;
 
    /* On charge et converti l'image */
    Temporaire = SDL_LoadBMP("./Ressources/Asteroid/Asteroid.bmp");
    if (Temporaire == NULL)
    {
        cout << "Probleme lors du chargement d'un sprite de la fonction \"CreationListeAnimationAsteroid\" : " << SDL_GetError() << endl;
        exit(EXIT_FAILURE);
    }
    Decoupage = SDL_DisplayFormat(Temporaire);
 
 
    /* On commence par creer le modele */
    for (int i=0 ; i<4 ; i++)
        for (int j=0 ; j<29 ; j++)
        {
            /* Creation de la surface, remplissage et definition de la couleur
               transparente pour les trois type d'asteroid */
            for (int k=0 ; k<3 ; k++)
            {
                /* Creation de la surface */
                RessourceSprite[i][k*45][j] = SDL_CreateRGBSurface(SDL_HWSURFACE, 32+k*24, 32+k*24, ECRAN_BPP, 0, 0, 0, 0);
                if (RessourceSprite[i][k*45][j] == NULL)
                {
                    cout << "Probleme lors de l'allocation d'une surface de la fonction \"CreationListeAnimationAsteroid\" : " << SDL_GetError() << endl;
                    exit(EXIT_FAILURE);
                }
 
                /* remplissage de la couleur de transparence */
                SDL_FillRect(RessourceSprite[i][k*45][j], NULL, 0xFF00FF);
 
                /*  Definition de la transparence */
                SDL_SetColorKey(RessourceSprite[i][k*45][j], SDL_SRCCOLORKEY | SDL_RLEACCEL, 0xFF00FF);
            }
 
            /* Choix du sprite a copier depuis le sprite "Asteroid" */
            positionSprite.x = j*80;
            positionSprite.y = i*80;
 
            SDL_BlitSurface(Decoupage, &positionSprite, RessourceSprite[i][90][j], NULL);
            sge_transform(RessourceSprite[i][90][j], RessourceSprite[i][0][j], 0, 0.4, 0.4, 40, 40, 16, 16, 0);
            sge_transform(RessourceSprite[i][90][j], RessourceSprite[i][45][j], 0, 0.7, 0.7, 40, 40, 28, 28, 0);
        }
 
    /* Une fois le modele créé, on n'a plus besoin de l'image "Asteroid" et de positionSprite */
    SDL_FreeSurface(Decoupage);
 
 
    /* A partir de ce modele, on va creer des serie de sprite comme ceux
       du modele mais incliné de 8° a chaque fois */
    for (int i=0 ; i<4 ; i++)
        for (int j=0 ; j<29 ; j++)
            for (int k=1 ; k<45 ; k++)
                for (int l=0 ; l<3 ; l++)
                {
                    /* Creation de la surface */
                    RessourceSprite[i][l*45+k][j] = SDL_CreateRGBSurface(SDL_HWSURFACE, 32+l*24, 32+l*24, ECRAN_BPP, 0, 0, 0, 0);
                    if (RessourceSprite[i][l*45+k][j] == NULL)
                    {
                        cout << "Probleme lors de l'allocation d'une surface de la fonction \"CreationListeAnimationAsteroid\" : " << SDL_GetError() << endl;
                        exit(EXIT_FAILURE);
                    }
 
 
                    /* remplissage de la couleur de transparence */
                    SDL_FillRect(RessourceSprite[i][l*45+k][j], NULL, 0xFF00FF);
 
                    /*  Definition de la transparence */
                    SDL_SetColorKey(RessourceSprite[i][l*45+k][j], SDL_SRCCOLORKEY | SDL_RLEACCEL, 0xFF00FF);
 
                    /* Appliquation de la rotation */
                    sge_transform(RessourceSprite[i][90][j], RessourceSprite[i][l*45+k][j], k*8, 0.4+l*0.3, 0.4+l*0.3, 40, 40, 16+l*12, 16+l*12, 0);
                }
 
 
    SDL_FreeSurface(Temporaire);
}
Donc, ma problématique se resume a ceci :

est il possible d'appeler cette fonction pour initialiser la variable de class ?
Si non, est-il possible de "traduire" cette fonction pour qu'elle initialise la variable de class.
Si non, est-il seulement possible d'initialiser la variable de class dans ces conditions ?

Voila, merci de votre lecture.