去年の復習になるが、最終的にゲームプログラムはこのような構造になる。(戦車ゲームの例)
黄色の部分はゲームエンジン(ほかのゲームでも使える部分)で、それ以外はそのゲーム特有の処理となる。
上の図でWinMain以外の箱はすべて「ゲームオブジェクト」となる。
すべてのゲームオブジェクトは「名前を持っている」「親子関係にできる」「位置・向き・角度を持ている」などの共通点が多いので、
すべてのゲームオブジェクトの親クラスとなる「GameObjectクラス」を作る。
このクラスは継承される専門のクラスで、純粋仮想関数のみで構成される。
このようなクラスのことをインターフェースという。
<GameObject.h> (「GameObject.h」と「GameObject.cpp」はEngineフォルダ内に作る)
#pragma once
#include ●●●●●
#include ●●●●●
#include ●●●●●
class GameObject
{
●●●●●●●● childList_;
●●●●●● transform_;
●●●●●● pParent_;
●●●●●● objectName_;
public:
GameObject();
GameObject(GameObject* parent, const std::string& name);
~GameObject();
●●●● void Initialize() ●●●;
●●●● void Update() ●●●;
●●●● void Draw() ●●●;
●●●● void Release() ●●●;
};
このクラスはインターフェースなので関数の実装はいらない。
cppにはコンストラクタとデストラクタだけ作り、引数ありのコンストラクタでメンバ変数の初期化だけしておこう。
では、すべてのゲームオブジェクトのトップにあたる「RootJob」クラスを作成しよう。
画面に直接出てくるわけではないが、これもゲームオブジェクトなのでGameObjectインターフェースを継承する。
コンストラクタとデストラクタ、純粋仮想関数をすべて実装するだけでよい(中身はカラでOK)
WinMainでRootJob型のポインタを作成し、然るべきタイミングでそれぞれの関数を呼ぶ。