Je suis débutant aussi bien en développement de jeux qu'en programmation.
J'essaie d'apprendre un principe dans la construction d'un moteur de jeu.
Je veux créer un jeu simple, j'en suis au point où j'essaie d'implémenter le moteur de jeu.
J'ai donc pensé que mon moteur de jeu devrait contrôler ces choses:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
J'ai conçu mes objets comme ceci:
class GlObject{
private:
idEnum ObjId;
//other identifiers
public:
void move_obj(); //the movements are the same for all the objects (nextpos = pos + vel)
void rotate_obj(); //rotations are the same for every objects too
virtual Polygon generate_mesh() = 0; // the polygons are different
}
et j'ai 4 objets différents dans mon jeu: avion, obstacle, joueur, balle et je les ai conçus comme ceci:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Maintenant, dans le moteur de jeu, je veux avoir une liste d'objets générale où je peux par exemple vérifier la collision, déplacer des objets, etc., mais je veux aussi que le moteur de jeu prenne les commandes de l'utilisateur pour contrôler le joueur ...
Est-ce une bonne idée?
class GameEngine{
private:
std::vector<GlObject*> objects; //an array containg all the object present
Player* hPlayer; //hPlayer is to be read as human player, and is a pointer to hold the reference to an object inside the array
public:
GameEngine();
//other stuff
}
le constructeur GameEngine sera comme ceci:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
Le fait que j'utilise un pointeur est parce que j'ai besoin d'appeler le fire()
qui est unique à l'objet Player.
Ma question est donc: est-ce une bonne idée? Mon utilisation de l'héritage est-elle mauvaise ici?