私はゲーム開発とプログラミングの両方の初心者です。
ゲームエンジンの構築に関する原則を学びたいと思っています。
シンプルなゲームを作成したいのですが、ゲームエンジンを実装しようとしているところです。
だから私は私のゲームエンジンがこれを制御する必要があると思った:
- Moving the objects in the scene
- Checking the collisions
- Adjusting movements based on collisions
- Passing the polygons to the rendering engine
私は私のオブジェクトを次のように設計しました:
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
}
ゲームには4種類のオブジェクトがあります。飛行機、障害物、プレイヤー、弾丸で、次のように設計しました。
class Player : public GlObject{
private:
std::string name;
public:
Player();
Bullet fire() const; //this method is unique to the class player
void generate_mesh();
}
ここで、ゲームエンジンで、たとえば衝突やオブジェクトの移動などを確認できる一般的なオブジェクトリストを作成しますが、ゲームエンジンがユーザーコマンドを使用してプレーヤーを制御することも必要です...
これは良いアイデアですか?
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
}
GameEngineコンストラクターは次のようになります。
GameEngine::GameEngine(){
hPlayer = new Player;
objects.push_back(hPlayer);
}
ポインターを使用してfire()
いるのは、Playerオブジェクトに固有のを呼び出す必要があるためです。
だから私の質問は:それは良いアイデアですか?私の継承の使用はここで間違っていますか?