2017-08-19 8 views
0

Je me demande comment est la bonne façon de créer des objets de classes dans la boucle de jeu une fois? Par exemple, j'ai des classes Box, Sphère, Cyllinder et je veux créer plusieurs objets à différents moments pendant que le programme fonctionne et travailler avec eux à l'avenir. Comment est la bonne façon de préserver ces objets? Combiner toutes les classes en tant que vecteur dans une classe?Créer un objet de classe dans la boucle de jeu

vector<glm::vec3> initVerts = {/*verts position*/}; 

class Box 
{ 
    vector<glm::vec3> verts; 
    Box(): verts(initVerts)  
    void moveBox(glm::vec3 newPos){ /*translate verts*/ } 
}; 

while (!windowShouldClose()) 
{ 
    Box box; 
    box.moveBox(1.0,0.0,0.0); // on the second pass it was another box with initial position 
} 
+0

demandez-vous comment créer des instances de une classe (objets) ou comment les stocker une fois créés? Fournir du code (ou même du pseudo code) sur ce que vous essayez de faire serait utile, je pense. – xaxxon

+0

xaxxon Je demande comment les stocker une fois créées. Je vais essayer de fournir du code. – OpenglNoob

+1

Stockez les objets dans un vecteur. Dès que le vecteur est hors de portée, les objets seront supprimés. Si vous stockez des pointeurs à la place, vous devez les supprimer vous-même. – Ripi2

Répondre

1

La méthode la plus simple consiste à créer un vecteur par type de classe. Pour commencer:

std::vector<Box> boxes; 
boxes.reserve(100); // however many you expect to need 
Box& box1 = boxes.emplace_back(); 

while (!windowShouldClose()) 
{ 
    box1.moveBox(1.0,0.0,0.0); 
} 

Ou si vous n'avez pas besoin d'un moyen de parcourir tous vos objets, vous pouvez simplement les stocker individuellement en dehors de la boucle:

Box box1; 

while (!windowShouldClose()) 
{ 
    box1.moveBox(1.0,0.0,0.0); 
} 
+0

Merci pour votre première solution. – OpenglNoob