イベントの登録 - sipo/gipo GitHub Wiki
起動処理
GearHolder内で以下の記述をすることであらかじめ用意されたイベントを登録することができます。
gear.addRunHandler(run);
用意されているイベントの種類は以下になります。各イベントの可能な動作や実行順序の詳細は処理順序の詳細を参照してください。
preparation
準備動作を登録します。
登録する関数の型は 'GearPreparationTool->Void' で、初期化専用の動作を行うことが出来ます。
Diffuse機能はこのタイミングでしか使用できません。
このタイミングではgear.addChild()は使用できませんが、代わりにtool.bookChild()を使用することで、preparationイベントの終了時にaddChildが自動実行されます。
run
開始処理を登録します。
このタイミングではDiffuse機能が使用できません。
addChildは使用できます。
bubble
あまり使用しません。詳細は処理順序の詳細を見てください
GearDispatcher
Gipoフレームワークでは、Templateパターンをあまり推奨してはいません。ゲームのような複雑な拡張があるときにCall Super アンチパターンに陥りやすくなるからです。
代わりにGearDispatcherという機能を用意しています。runなどのイベントはこの一種ですが、新しく定義することもできます。
使用手順
専用のインスタンスを作る。
updateDispatcher = new GearDispatcher(AddBehaviorPreset.addTail, false);
第1引数は複数の登録があった場合の処理の方法を指定します。この場合は、登録リストの最後に追加されます。多くの場合この指定で問題ありません。第2引数は1度限りの実行であるかどうかを指定します。繰り返されるイベントであれば false
を指定します。
サブクラス等でイベント関数を登録する
updateDispatcher.add(update);
実行タイミングで呼び出す
public function sceneUpdate():Void
{
updateDispatcher.execute();
}
登録された関数が順番に呼び出されます。
コンストラクタで登録処理をすることで、スーパークラスの関数が先に、サブクラスの関数が後に実行されることになります。
引数がある場合
GenericGearDispatcherを使用します。
Role
GearRoleDispatcherを使用することで、引数の型に応じた関数を呼び出すことができます。
inputRole = new GearRoleDispatcher();
inputRole.set(viewInput, Mock0ViewInput);
inline public function noticeInput(command:EnumValue):Void
{
inputRole.execute(command);
}
private function viewInput(command:Mock0ViewInput):Void
{
switch(command)
{
case Mock0ViewInput.DemoDisplayButton: input_demoTraceButton();
case Mock0ViewInput.DemoChangeSceneButton: input_demoChangeSceneButton();
case Mock0ViewInput.DemoReadySceneButton: input_demoReadySceneButton();
}
}
このようにすることで、command
の型がMock0ViewInput
の時だけ、viewInput
が呼び出されます。