Sono un principiante sia nello sviluppo del gioco che nella programmazione.
Sto cercando di imparare alcuni principi nella costruzione di un motore di gioco.
Voglio creare un gioco semplice, sono nel punto in cui sto cercando di implementare il motore di gioco.
Quindi ho pensato che il mio motore di gioco dovesse controllare queste cose:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
Ho progettato i miei oggetti in questo modo:
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 ho 4 oggetti diversi nel mio gioco: aereo, ostacolo, giocatore, proiettile e li abbiamo progettati in questo modo:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Ora nel motore di gioco voglio avere un elenco di oggetti generale in cui posso verificare, ad esempio, la collisione, spostare oggetti e così via, ma voglio anche che il motore di gioco prenda i comandi utente per controllare il giocatore ...
E 'questa una buona 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
}
il costruttore GameEngine sarà così:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
Il fatto che sto usando un puntatore è perché devo chiamare quello fire()
che è unico per l'oggetto Player.
Quindi la mia domanda è: è una buona idea? Il mio uso dell'eredità è sbagliato qui?