203.ゲームオブジェクトの構造
ステージに配置されるオブジェクトは
GameObjectクラスか、その派生クラスを作成して配置します。
GameObjectクラスのインスタンスを配置した場合、
OnUpdate()関数などを記述すrことはできません。ですのでほとんどの場合
派生クラスを作成してそのインスタンスを配置する形になります。
この項では
GameObjectクラスはどういうクラスで、どういうことができるのかを述べます。
また、その構成上重要な
コンポーネントについては次項以降に述べます。
GameObjectクラス
GameObjectクラスは派生クラスから様々な機能を使用できるよう設計されています。
GameObjectクラスは、配置しただけでは何もしません。
コンポーネントを追加し、そのコンポーネントのパラメータなどを設定してはじめて
ステージ上に表示あるいは
動くようになります。
まず、コンポーネント以外の機能や設定について述べます。
GameObjectの仮想関数
GameObjectクラスには以下の仮想関数があり、ステージあるいはほかのフレームワークから呼び出されます。以下に主な仮想関数名と呼ばれるタイミング、そして多重定義する場合の注意をまとめました。
仮想関数名 |
呼ばれるタイミング |
使用上の注意 |
OnPreCreate() |
コンストラクタの直後 |
必ず親クラスのOnPreCreate()を呼ぶ |
OnCreate() |
OnPreCreate()の直後 |
通常はここで必要な初期化処理を行う |
OnEvent() |
イベントが発生した時 |
|
OnUpdate() |
各ターンの、最初の更新処理 |
|
OnCollision() |
衝突判定実装時でかつFixでない場合に、何かに衝突始めた時 |
|
OnCollisionExcute() |
衝突判定実装時でかつFixでない場合に、何かに衝突し続けているとき |
|
OnCollisionExit() |
衝突判定実装時でかつFixでない場合に、何かとの衝突状態が抜けたとき |
|
OnUpdate2() |
各ターンの、最後の更新処理 |
|
OnPreDraw() |
描画処理の直前 |
|
OnGetDrawCamera() |
描画用の独自カメラを必要とするとき |
|
OnGetDrawLight() |
描画用の独自ライトを必要とするとき |
|
OnGet2DDrawProjMatrix() |
2D描画用の独自射影行列を必要とするとき |
|
OnDraw() |
描画時 |
通常は描画コンポーネントに描画を任せる |
各仮想関数は、派生クラスで多重定義することで使用できますが、この表にはパラメータは乗ってませんが、
パラメータを必要とするあるいは
戻り値が必要な仮想関数もあるので注意しましょう。
GameObjectのアクセサ
GameObjectでは、多くのパラメータ設定は
コンポーネントで行うので、直接の設定は少ないのですが、あります。以下に主に使うパラメータ設定と取得(アクセサ)を述べます。
関数名 |
用途 |
bool IsUpdateActive() const;、
bool GetUpdateActive() const;
|
更新処理が有効かどうかを得る
|
void SetUpdateActive(bool b);
|
更新処理が有効かどうかを設定する
|
bool IsDrawActive() const;、
bool GetDrawActive() const;
|
描画処理が有効かどうかを得る
|
void SetDrawActive(bool b);
|
描画処理が有効かどうかを設定する
|
bool IsAlphaActive() const;、
bool GetAlphaActive() const;
|
透明処理するかどうかを得る
|
void SetAlphaActive(bool b);
|
透明処理するかどうかを設定する
|
int GetDrawLayer() const;
|
描画レイヤーを得る
|
void SetDrawLayer(int l);
|
描画レイヤーを設定する
|
shared_ptr GetStage(bool ExceptionActive = true) const;
|
ステージを得る
|
更新処理や描画処理は有効無効を設定できます。ステージの項でも説明しましたが、配置されているオブジェクトを
削除でゲーム上から消す代わりに
更新と描画を無効にするという方法で処理したほうが効率的な場合があります。(これはそのオブジェクトの追加と削除が頻繁に行われる場合です)。
また、
描画レイヤーの設定は、重なったオブジェクト同士の
透明処理がうまくいかないときに使用します。通常は
透明でないものを先に描画し、透明なものをあとに描画します。そして透明なもの同士は、カメラから見て遠い順に描画します。しかし、位置関係によっては
透明処理がうまくいかないこともあります。そんな場合は、
描画レイヤーを設定します。
描画レイヤーが低い値だと、先に描画されます。デフォルトは
0です。ですから
-1にすればほかの
0のオブジェクトより先に描画されます。同じ描画レイヤー同士では
カメラから見て遠い順ということになります。