如何订阅双击?

时间:2013-04-19 18:48:53

标签: c# xna double-click

我正试图找到一种方法来订阅XNA中的双击事件,谷歌搜索获取winforms相关的东西,但事实并非如此,我不能使用它。

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

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

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


删除了“不使用Control类事件”,因为实际上有一种方法可以使用该类(请参阅我的回答)。

2 个答案:

答案 0 :(得分:2)

您可以按照this post

中的说明创建自己的双击检查器
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程序集并阅读{{3如果您不想导入程序集,则可以P / Invoke GetDoubleClickTime方法。

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

因此,将上述方法添加到XNA代码中,您可以像这样获得用户的默认双击时间

const double TimerDelay = (double)GetDoubleClickTime();

答案 1 :(得分:0)

我想出了这个:

using wf = System.Windows.Forms;

wf.Form form = (wf.Form)wf.Control.FromHandle(this.Window.Handle);
form.MouseDoubleClick += new wf.MouseEventHandler(form_MouseDoubleClick);

因此,有一种方法可以使用Control类在XNA中执行此操作:)