Soy un principiante tanto en desarrollo de juegos como en programación.
Estoy tratando de aprender algunos principios en la construcción de un motor de juego.
Quiero crear un juego simple, estoy en el punto donde estoy tratando de implementar el motor del juego.
Entonces pensé que mi motor de juego debería controlar estas cosas:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
Diseñé mis objetos así:
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
}
y tengo 4 objetos diferentes en mi juego: avión, obstáculo, jugador, bala y los diseñé así:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Ahora, en el motor del juego, quiero tener una lista general de objetos donde pueda verificar, por ejemplo, la colisión, mover objetos, etc., pero también quiero que el motor del juego tome los comandos del usuario para controlar al jugador ...
¿Es esta una buena idea?
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
}
El constructor de GameEngine será así:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
El hecho de que estoy usando un puntero es porque necesito llamar al fire()
que es exclusivo del objeto Player.
Entonces mi pregunta es: ¿es una buena idea? ¿Mi uso de la herencia está mal aquí?