壊れたメガネ

ホッチキスの達人の意識の高いブログ。

AndEngine の Touch Event について調べてみた

AndEngine の Touch Event についてすこし調べてみたので、まとめてみましました。

Touch Event 検出の大まかな流れ

  1. EngineTouchEventを検出する。
  2. そのTouchEventEngineが保持する唯一のSceneに通知する。(Scene#onSceneTouchEvent() をコールする)
  3. Sceneに登録されたイベントハンドラに通知されていく。

イベントハンドラの登録

実際にイベントを扱うにはScene.ITouchAreaを実装し、それをScene#registerTouchArea(Scene.ITouchArea)を通してSceneに登録する必要があります。SceneはこれらScene.ITouchAreaをリストとして保持しています。

イベントの扱い

上で挙げたように、Sceneがイベントを検出すると、 イベントハンドラに対して順々にイベントが通知されていきます。通知はScene.ITouchArea#onAreaTouched()をコールすることで行われます。

Scene.ITouchArea#onAreaTouched()の戻り値の違いについて、trueを返せば(すなわちイベントをハンドルしたなら)イベントは親であるSceneに伝播することはありません。falseを返せばSceneに伝播します。

「イベントが親に伝播する」とは、Scene#setOnAreaTouchListener()を通して登録されたイベントリスナScene.mOnAreaTouchListenerにイベントが渡されるという事です。

イベントの通知順

Sceneにおいて、イベントを通知する際にリストの先頭のイベントハンドラから順に通知するか、あるいはその逆かを指定できます。

Scene#setOnAreaTouchTraversalBackToFront() をコールすれば登録順に、 Scene#setOnAreaTouchTraversalFrontToBack()をコールすればリスト末尾から通知されます。
デフォルトでは登録順に通知されます。