Ich bin ein Anfänger sowohl in der Spieleentwicklung als auch in der Programmierung.
Ich versuche, ein Prinzip beim Aufbau einer Spiel-Engine zu lernen.
Ich möchte ein einfaches Spiel erstellen. Ich bin an dem Punkt angelangt, an dem ich versuche, die Spiel-Engine zu implementieren.
Also dachte ich, meine Spiel-Engine sollte diese Dinge kontrollieren:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
Ich habe meine Objekte so gestaltet:
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
}
und ich habe 4 verschiedene Objekte in meinem Spiel: Flugzeug, Hindernis, Spieler, Kugel und ich habe sie so entworfen:
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
Jetzt möchte ich in der Spiel-Engine eine allgemeine Objektliste haben, in der ich zum Beispiel nach Kollisionen suchen, Objekte verschieben usw. kann, aber ich möchte auch, dass die Spiel-Engine die Benutzerbefehle verwendet, um den Spieler zu steuern ...
Ist das eine gute Idee?
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
}
Der GameEngine-Konstruktor sieht folgendermaßen aus:
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
Die Tatsache, dass ich einen Zeiger verwende, liegt daran, dass ich den fire()
für das Player-Objekt eindeutigen Zeiger aufrufen muss .
Meine Frage ist also: Ist das eine gute Idee? Ist meine Verwendung der Vererbung hier falsch?