如何订阅双击

本文关键字:双击 何订阅 | 更新日期: 2023-09-27 18:10:08

我试图找到一种方法来订阅XNA中的双击事件,谷歌给我winforms相关的东西,这不是情况,我不能使用。

使用Timespan并猜测PC上双击的超时时间是不太可靠的。

默认的XNA输入系统也有这个小缺陷:有时在更新之间按键或鼠标点击会丢失,这会破坏游戏高负载时刻双击的可靠性。

如何订阅。net中的双击事件?


"不使用Control类事件"被删除,因为实际上有一种方法可以使用该类(参见我的回答)。

如何订阅双击

你可以创建你自己的双击检查器。

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的任意值),您可以导入Windows.Forms程序集并读取SystemInformation。或者,如果您不想导入程序集,您可以P/调用GetDoubleClickTime方法。

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int GetDoubleClickTime(); 
因此,将上述方法添加到XNA代码中,您可以获得用户的默认双击时间,如下所示
const double TimerDelay = (double)GetDoubleClickTime();

我刚想到这个:

using wf = System.Windows.Forms;
wf.Form form = (wf.Form)wf.Control.FromHandle(this.Window.Handle);
form.MouseDoubleClick += new wf.MouseEventHandler(form_MouseDoubleClick);
所以在XNA中确实有一种方法可以做到这一点使用Control类:)