ユーザーが指を押したままにしたときのアクションがありますが、ユーザーが指を押している間、このアクションを継続的に行うにはどうすればよいですか? たとえば、したい: moveRight += 10; ユーザーが画面の右側を指で押している間、連続して XNAでこれを行う方法を知っている人はいますか?
2 に答える
マウス入力 API (WP7 での簡単なシングルタッチ入力用)のいずれかを使用し、具体的には以下を確認します。
MouseState ms = Mouse.GetState();
if(ms.LeftButton == ButtonState.Pressed && ms.X > centerOfScreen)
{
DoSomething();
}
または、WP7でタッチ入力 APIを使用します。
TouchCollection touches = TouchPanel.GetState();
foreach(TouchLocation touch in touches)
{
if((touch.State == TouchLocationState.Pressed
|| touch.State == TouchLocationState.Moved)
&& touch.Position.X > centerOfScreen)
{
DoSomething();
break;
}
}
指を離したときのアクションはありますか?その場合は、イベントに応答するだけでなく、ループ構造 (ゲーム ループ) を使用して入力状態を追加します。
- 「ホールド」イベントを取得したら、その状態を「true」に設定します
- 「保留」イベントが終了したというイベントを取得する場合は、「false」に設定します。
- ループ内のブール値を確認し、設定されている場合は x 値 (または x 速度) をインクリメントします。
Gesture Support for Windows Phone のドキュメントを参照してください。
おそらく、処理したい「リリース」イベントがManipulationCompleted
イベントです。Silverlight のみなのか、Silverlight と XNA の両方なのかはわかりませんが...
それが失敗した場合は、処理できる下位レベルのイベントが存在する可能性があります。
ジェスチャーは、一連のモーション全体を抽象化したものです。API は、何が起こったのかを把握し、どのように起こったかではなく、実際に起こったことを伝えるという汚い仕事をすべて行うように設計されています。それよりも細かい制御が必要な場合は、より細かい API が必要です。
http://msdn.microsoft.com/en-us/library/ff607287(v=VS.95).aspx (おそらくTouch クラス)を参照してください。