イベントの登録 - 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が呼び出されます。