[Vector] Adresse de l'objet d'un vecteur
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 :
Code:
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);
} |
La déclaration des objets et l'ajout des objets dans ObjectManager :
Code:
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... |
Je soupçonne la dernière ligne d'être la cause de tout ça.
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.