Android携帯ゲームを作って世界に配信してみよう(2) ―― ゲームの基本構造とタップやフリックの処理を学ぶ
●タッチ入力のイベント処理はループ内のスレッド処理に委ねる
ユーザが画面にタッチすると,View#onTouchEventが呼び出されます.ここでのポイントは,onTouchEvent内ではイベント処理をせずにイベントをキューに蓄積して,ゲーム・ループ内の処理で必要に応じて取り出すようにすることです(リスト4の(a)).
リスト4 タッチ入力が発生したときの処理(GameView.javaより抜粋)

●指の移動距離でタッチとフリックを見分ける
ゲーム・ループ内でScene#processを呼び出し(リスト3の(i)),このメソッドにおいて,onTouchEventでキューに登録したイベントをキューから取り出します(リスト5の(a)).キュー内に複数ある場合は,すべてのイベントを一つずつ取り出します.
リスト5 タッチ入力イベントを取り出す(GameScene.javaより抜粋)

MotionEvent#getActionで,ユーザが引き起こした操作の種別を取得します(リスト5の(b)).ユーザが画面に指を触れた瞬間にACTION_DOWNイベントが発生するので,後でタップかフリックかを判定するために,タッチした瞬間のタッチした位置を保存しておきます(リスト5の(c)).
また,ユーザが画面から指を離すとACTION_UPイベントが発生するので,ACTION_DOWNのタイミングで記録した最初に指が触れてタッチした瞬間の位置と,現在タッチしている位置の差分をとり,タッチ中の指の移動距離をとります(リスト5の(d)).移動が一定の距離内であればタップとみなし,一定以上であればフリックとみなします(リスト5の(e)).