サイトのトップへ戻る

AndEngineドキュメント 日本語訳

タッチし続けた時のイベント:

この記事では、タッチし続けた時のイベントを問題なく適切に検知する簡単な方法を紹介します。

これは、タッチし続けた時のイベントが不可欠な(ゲームコントローラ。例えば、右や左に移動する用のコントローラー)を作成する際に特に有用です。 いくつかのタッチイベントを組み合わせていくつかのロジックを使用し、これを簡単に実装することができます。

特定のアクションを実行し続けるべきspriteがいくつかあるとします (例えば、操作を加えてプレイヤーをX軸方向に移動させる)。 この例ではspriteクラスではなくRectangle クラスを使用していますが、使用するエンティティはあなた次第です。



1. 可能な解決方法:
個人的に知っている二つのやり方を紹介します:
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);
	}
};
このアプローチでは、タッチし続けた時のイベントをキャッチするために完璧に反応するコントローラを実装します。 上記のコードで、それをどうやって実装しているのかを説明します。:
  • まず最初に、ボタンの状態を保存するboolean型のフラグを新しく作成します。
  • 上でやっているように、Rectangle を使ったボタンを作成します。
  • タッチイベントをキャッチするために onAreaTouched メソッドを上書きします。
  • isActionDownが実行された時、フラグを true に設定します(プレイヤーがボタンのタッチを開始した時)
  • isActionUpが実行された時、フラグを false に設定します (プレイヤーが指を離した時)
  • この時、もう一つのメソッド onManageUpdate を上書きします。 onManageUpdate ではフラグがtrueかどうかを確認し、trueの場合はアクションを実行します。

アップデートハンドラを使うこの方法では、アップデートの度に 継続 タッチのような状態に実際になっているかどうかを確認します。 完全応答コントローラを取得します。