この記事では、タッチし続けた時のイベントを問題なく適切に検知する簡単な方法を紹介します。
これは、タッチし続けた時のイベントが不可欠な(ゲームコントローラ。例えば、右や左に移動する用のコントローラー)を作成する際に特に有用です。 いくつかのタッチイベントを組み合わせていくつかのロジックを使用し、これを簡単に実装することができます。
特定のアクションを実行し続けるべきspriteがいくつかあるとします (例えば、操作を加えてプレイヤーをX軸方向に移動させる)。 この例ではspriteクラスではなくRectangle クラスを使用していますが、使用するエンティティはあなた次第です。
final Rectangle button = new Rectangle(0, 0, 100, 100, vbo) { @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { if (pSceneTouchEvent.isActionMove()) { // Handle your action here } return true; } };見て分かるように、ボタンを作成して(前で述べたように今回はRectangle クラスを使用しています)、onAreaTouched メソッドを上書きし、isActionMove()イベントをキャッチしています。 指でボタンを押している間に寸分たがわぬ同じ位置を押し続けることはほとんど不可能なので、これはいい方法です。 例え1~2ピクセルの場合でさえも、指が動く度にaction moveは呼び出されるのです。 しかし私の経験上、これはパーフェクトな解決方法ではありません。ゲームコントローラーシステムは本当に重要なもので、プレイヤーは常に正しい反応を期待しています。 よりよりアプローチを使用することが可能なので、以下を見てください:
// our flag private boolean isTouchedFlag = false; // our button final Rectangle button = new Rectangle(0, 0, 100, 100, vbo) { @Override public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { if (pSceneTouchEvent.isActionDown()) { isTouchedFlag = true; } if (pSceneTouchEvent.isActionUp()) { isTouchedFlag = false; } return true; } @Override protected void onManagedUpdate(float pSecondsElapsed) { if (isTouchedFlag) { // Execute your actions. } super.onManagedUpdate(pSecondsElapsed); } };このアプローチでは、タッチし続けた時のイベントをキャッチするために完璧に反応するコントローラを実装します。 上記のコードで、それをどうやって実装しているのかを説明します。:
アップデートハンドラを使うこの方法では、アップデートの度に 継続 タッチのような状態に実際になっているかどうかを確認します。 完全応答コントローラを取得します。