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),您可以导入Windows.Forms程序集并读取SystemInformation.DoubleClickTime属性,或者,如果您不想导入程序集,您可以 P/InvokeGetDoubleClickTime方法。

[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 回答
0

我只是想出了这个:

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类 :)

于 2013-04-19T19:14:15.003 回答