2

XNA でダブルクリック イベントをサブスクライブする方法を見つけようとしていますが、グーグルで winforms 関連のものを入手できますが、そうではなく、使用できません。

PC でダブルクリックのタイムアウト時間を使用Timespanして推測することは、あまり信頼できません。

デフォルトの XNA 入力システムにも、この小さな欠陥があります。キーを押したりマウスをクリックしたりすることが更新の間に失われることがあり、ゲームの高負荷時にダブルクリックの信頼性が損なわれることがあります。

.net でダブルクリック イベントを購読するにはどうすればよいですか?


Control実際にそのクラスを使用する方法があるため、「クラスイベントを使用しない」は削除されました(私の回答を参照)。

4

2 に答える 2

2

この投稿で説明されているように、独自のダブルクリック チェッカーを作成できます。

double ClickTimer;
const double TimerDelay = 500;

public override void Update(GameTime gameTime)
{
     ClickTimer += gameTime.ElapsedGameTime.TotalMilliseconds;
     if(Mouse.GetState().LeftButton == ButtonState.Pressed)
     {
          if(ClickTimer < TimerDelay)
              //this is a double click
          else
              //this is a normal click

          ClickTimer = 0;
     }
}

そのコードで500は、ユーザーがダブルクリックしなければならないミリ秒単位の最大時間として設定されています。ユーザーがシステムの最大ダブルクリック時間として設定したミリ秒を (任意の値に設定するのではなく) 取得するには、アセンブリを500インポートしてSystemInformation.DoubleClickTimeプロパティを読み取るか、またはしたくない場合はアセンブリをインポートすると、メソッドを P/Invoke できます。Windows.FormsGetDoubleClickTime

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int GetDoubleClickTime(); 

上記のメソッドを XNA コードに追加すると、次のようにユーザーのデフォルトのダブルクリック時間を取得できます。

const double TimerDelay = (double)GetDoubleClickTime();
于 2013-04-19T19:07:45.880 に答える