Bonjour, j'ai un problème d'utilisation de vecteurs dans le cadre d'un petit jeu de casse brique.
Pour résumer, le jeu contient une classe abstraite Object, sur laquelle dérivent 3 autres classes. Une classe Player, Ball et Brick.
Ces 3 classes sont gérées par une classe ObjectManager qui contient un vecteur qui pointe sur tous les objets de la scène.
La classe ObjectManager :
La déclaration des objets et l'ajout des objets dans ObjectManager :
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 class ObjectManager { private: std::vector<Object *> list; public: ~ObjectManager(); void addObject(Object*); Object* getObject(int i) { return list[i]; } int getSize() { return list.size(); } }; ObjectManager::~ObjectManager() { while (!list.empty()) list.pop_back(); } void ObjectManager::addObject(Object *t_object) { list.push_back(t_object); }
Je soupçonne la dernière ligne d'être la cause de tout ça.
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 // Quelque part dans le main ... // Déclaration des Objets de la scène. ->Objets(int position_x, int position_y) Player player(240, 460); // le player s'affiche en bleu Brick bricktest(50, 50); // Brique s'affiche en rouge Ball ball(320, 430); // La balle s'affiche en rouge std::vector<Brick> bricklist; // Toutes les briques sont dans un vecteurs for (int i = 10; i < 620; i += 25) for (int j = 10; j < 300; j += 15) bricklist.push_back(Brick(i, j)); // Ajout des objets précédents objectmanager.addObject(&ball); objectmanager.addObject(&bricktest); objectmanager.addObject(&player); for (int i = 0; i < bricklist.size(); i++) objectmanager.addObject(&bricklist[i]); //<--- PAS BON, mais fonctionne ... // De plus les briques s'affichent en bleue, c'est la couleur de l'objet précédents soit player...
Ce code compile, pas d'erreur avec MinGW, mais lors de l'affichage des briques, elles ne sont pas de la bonne couleur -> toutes les briques qui étaient dans le vecteur sont bleues, alors que la brique déclarée normallement est rouge (la couleur étant générée dans le constructeur), et ça rame bien.
Voilà, donc je pense qu'il y a un gros problèmes dans la mémoire, mais je n'arrive pas a le régler. Surement une mauvaise utilisation du vecteur pour faire passé l'adresse dans la dernière ligne.
Merci d'avance d'avoir lu !
EDIT : Aïe, je me suis trompé de section, si un admin passe par ici, pourrait-il le déplacer dans la section SL & STL, merci.
Partager