Bonsoir !
Alors en fait, j'ai un s�rieux probl�me, je ne peux plus acc�der � mes variables depuis la classe fille. vous allez dire "comment �a tu ne peux plus, tu pouvais avant?" eh oui ! pas plus tard que cette nuit :o tout marchait � merveilles, j'�teins mon pc, je reprend cet aprem, et l� c'est le drame, tout est cass� OO et pour le coup je n'ai vraiment rien bidouill� sur ces bouts de codes.. enfin bref
donc voil�, j'ai ma classe Sprite, qui contient donc le tableau pos[] pour stocker la position actuelle de l'objet. Cette classe est l'heureuse maman de deux petites classes: Bullet et Enemy. et l� o� Bullet tient tout de sa m�re, Enemy est carr�ment plus rebelle et d�cide de trouver sa position qu'une fois sur deux.

Si je fais un printf enemy->getPosX/Y(), �a marche une fois sur deux. Dans ma gestion des collisions, �a me fait pouf, segment fault. Si dans une m�thode d'Enemy je fais pos[x/y] pareil , il va me sortir des variables d'un autre monde. Et c'est quand m�me vachement emb�tant ! Surtout quand le compilo peut pas vous aider D8

Assez parl�, voil� du code ! :
Sprite.h
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
 
#include <vector>
 
 
class Mouvement;
 
class Sprite
{
    protected:
 
        SDL_Surface *image;
 
        std::vector<Mouvement*> mouvements;
        unsigned int mouv_act;
 
        float pos[2];
        float hit_box_center[2];
        float hit_box_radius;
 
        float delay;//spawn delay
 
        bool dead;
 
    public:
 
        Sprite();
        Sprite(SDL_Surface *sprite, float s_delay);
        ~Sprite();
 
        /*** setter ***/
 
        void addMouvement(Mouvement *mov);
        void removeMouvement(int i);
        void setDead(bool n_dead);
        void updatePos(float xx, float yy);
 
        /*** getter ***/
 
        SDL_Surface* getSprite();
        float getDelay();
        float getPosX();
        float getPosY();
        float getHitBoxCenterX();
        float getHitBoxCenterY();
        float getHitBoxRadius();
        int getImageH();
        int getImageW();
        int getMouvementSize();
        Mouvement* getMouvement(int i);
        void refresh(SDL_Surface *screen);
 
 
};
Enemy.h
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
 
#include "Sprite.h"
 
class Spellcard;
 
class Enemy : public Sprite
{
    protected:
 
        int life;
        int level;//kind of enemy
 
        std::vector<Spellcard*> spellcards;
        Spellcard* kamikaze;
        std::vector<Spellcard*> to_shoot;
 
        bool hit;
        bool is_kamikaze;
 
 
    public:
 
        Enemy(SDL_Surface *sprite, int s_life, int s_level, float s_delay);
        ~Enemy();
 
        /*** setter ***/
 
        void addSpellcard(Spellcard *spell);
        void addKamikazeSpell(Spellcard *spell);
        void shoot(Spellcard *spell);
        void setLife(int n_life);
        void setHit(bool n_hit);
        void setKamikaze(bool k);
 
        /*** getter ***/
        int getLife();
        int getLevel();
        unsigned int getSpellcardSize();
        unsigned int getShootingSize();
        Spellcard* getSpellcard(unsigned int i);
        Spellcard* getShootingSpellcard(unsigned int i);
 
        bool isKamikaze();
        Spellcard* getKamikazeSpell();
 
 
        /*** autres ***/
        void drop();
        void die();
};
Enemy.cpp
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
 
#include "Enemy.h"
#include "Spellcard.h"
#include "Mouvement.h"
#include "Bullet.h"
#include "Sprite.h"
#include "Enums.h"
 
Enemy::Enemy(SDL_Surface *sprite, int s_life, int s_level, float s_delay) : Sprite(sprite, s_delay)
{
 
    life = s_life;
    level = s_level;
 
    hit = false;
}
 //le bout de code méchant qui veut pas marcher
void Enemy::shoot(Spellcard *spell)
{
    to_shoot.push_back(spell);
    printf("shoot : enemy %p [%f, %f]\n", this, this->getPosX(), pos[y]);
 
    for(int i = 0; i<spell->getBulletNb(); i++)
    {
        for(int j = 0; j<spell->getBullet(i)->getMouvementSize(); j++)
        {
            float xx = pos[x] + spell->getBullet(i)->getMouvement(j)->getStartX();
            float yy = pos[y] + spell->getBullet(i)->getMouvement(j)->getStartY();
           // printf("new start for %p [%f, %f], previous[%f, %f]\n", spell->getBullet(i), xx, yy, spell->getBullet(i)->getMouvement(j)->getStartX(), spell->getBullet(i)->getMouvement(j)->getStartY());
        }
    }
} //en vrai, la fonction fait plus rien là, normalement j'updatais la position de mes boulettes en fonction de celle de l'ennemi au moment de shooter, mais... bah voilà quoi
et enfin ceci marche
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
 
for(i=0; i< on_screen_enemy.size(); i++)
        {
            on_screen_enemy[i]->refresh(screen);
            printf("enemy %p [%f, %f]\n", on_screen_enemy[i], on_screen_enemy[i]->getPosX(), on_screen_enemy[i]->getPosY());
        }
par marche j'entends m'affiche les bonnes coordonn�es dans le printf

tandis que ceci :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
 
float dx = (b->getPosX() + b->getHitBoxCenterX()) - (e->getPosX() + e->getHitBoxCenterX());
    float dy = (b->getPosY() + b->getHitBoxCenterY()) - (e->getPosY() + e->getHitBoxCenterY());
    float r = b->getHitBoxRadius() + e->getHitBoxRadius();
fini par me fermer le programme avec une segmentfault.

et mes ennemis sont cr�e de la sorte
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
 
for(i=100; i<=800; i+=50)
    {
        Enemy *e = new Enemy(fool, 0, 0, i);
        Spellcard *s = new Spellcard(spell11());
        e->addSpellcard(s);
 
        Mouvement *m = new Mouvement(mouv01());
        e->addMouvement(m);
 
        enemy.push_back(e);
    }
L� je vois vraiment pas, parce que je n'ai vraiment touch� � aucun de ces morceaux de code, et hier, �a marchait OO la seule chose que j'ai touch�, c'est la boucle de cr�ation, mais mon constructeur est okay, du moins, en ad�quation avec ce qui est dans enemy.cpp
De plus, les d�placements � l'�cran sont bon, le probl�me du coup c'est qu'au moment de tirer mes boulettes, je veux r�cup�rer la position du tireur, parce que bon, faire partir une boulette d'en haut � gauche alors que l'ennemi est au centre de l'�cran...

Merci par avance, en esp�rant que vous pourrez m'aider :o si besoin de plus d'infos je ne bouge pas de mon pc tant que ce probl�me n'est pas r�solu, donc demandez !