Sou iniciante no desenvolvimento e programação de jogos.
Estou tentando aprender algum princípio na construção de um mecanismo de jogo.
Eu quero criar um jogo simples, estou no ponto em que estou tentando implementar o mecanismo do jogo.
Então pensei que meu mecanismo de jogo deveria controlar essas coisas:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
Eu projetei meus objetos assim:
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
}
e eu tenho 4 objetos diferentes no meu jogo: avião, obstáculo, jogador, bala e os projetei assim:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Agora, no mecanismo de jogo, quero ter uma lista geral de objetos, onde posso verificar, por exemplo, colisão, mover objetos etc., mas também quero que o mecanismo de jogo use os comandos do usuário para controlar o jogador ...
Isso é uma boa ideia?
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
}
o construtor GameEngine será assim:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
O fato de eu estar usando um ponteiro é porque preciso chamar o fire()
que é exclusivo para o objeto Player.
Então, minha pergunta é: é uma boa ideia? Meu uso da herança está errado aqui?