子から親へ選択的なデータアクセスを行うクラス構成
AS3 でゲームを作る場合に僕が良く使うクラス構成です。
[caption id=“attachment_2481” align=“alignnone” width=“605” caption=“コンテキストを用いたデータのやり取り図”][/caption]
各オブジェクトのメイン処理は各クラスの execute() で行います。
各クラスのデータのみ使用する処理の場合は特に特殊な考えは不要ですが、
例えばキャラクターオブジェクトの攻撃動作で炎オブジェクトを出現させたい場合、
自クラスのみでは解決出来ません。
そういう場合は、ctx によって公開されている親オブジェクトのメソッドに対し、
「炎を作って!」と依頼します。(↓みたいなイメージ)
ctx.createFire(x, y);
親オブジェクトは各キャラクターと炎との当たり判定処理を行い、
当たり有りと判定した場合、炎の例えば hit(this) 等呼び出します。
炎クラスの hit() 内では ctx を介して
ctx.damageCharacter(10); // キャラクターにダメージを与える
ctx.removeFire(this); // 自分自信を消す
等実行します。
まぁつまり、キャラクターと炎のデータやり取りを親に任せることで、
オブジェクト同士のやり取りが自由になるわけです。
親は子のデータやり取りを選択的に開放しているので、
コードが無秩序ということもなく、ある程度ルールに基づいた実装が可能です。
(限度はありますが。)
些細な問題かもしれませんが、上記図の通り、 孫→親のデータアクセスのためには、子に親オブジェクトを持たさなければならなそうで、 これが気持ち悪く思っています。 どうにかならないものですかねぇ。