【问题标题】:(VB) How to detect a keypress only once, even when holding the key down?(VB)即使按住键,如何只检测一次按键?
【发布时间】:2015-01-03 01:01:24
【问题描述】:

我最近一直在从事一个大型游戏项目,并尝试了几种检测键盘输入的方法。对于移动,我使用 getasynckeystate(这是完美的),因为它会在每个按键被按下的滴答声中发送一个信号。

然后是另一种方法,即keydown。此方法适用于单个按键,但一秒钟后开始向按键操作发送垃圾邮件。

我的目标是找到一种即使你按住键也只会检测到你的按键一次的东西;一旦你放开钥匙,它会让你再次击中它。请帮助并感谢您阅读本文!

例子:

如果 GetAsyncKeyState(Convert.ToInt32(Keys.W)) 那么.... 如果 e.keycode = keys.B 那么....

【问题讨论】:

  • 这是正常的,按住键开始重复。啊啊啊啊啊啊啊啊啊啊。检查this post

标签: vb.net keypress keydown


【解决方案1】:

'keyUp' 事件捕获被按下或仅被按下一次的键:

Sub Control_KeyUp(sender As Object, e As KeyEventArgs) Handles Control.KeyUp
        MsgBox("Pressed key: " & e.KeyCode.ToString())
End Sub

编辑:删除私有访问,以便可以从另一个类中调用它。

【讨论】:

  • 完美运行!非常感谢!另一方面,有没有办法从主类以外的类调用这个子类?
  • 你可以这样做:调用Control_KeyUp (Me, New KeyEventArgs (Keys.A)),这里我将A键发送给Sub。
  • 感谢您的回复,但不幸的是,该代码不适用于我正在尝试做的事情。基本上,我试图在 main 之外的一个类中制作这个 sub,所以“control.keyup”部分会出错,Visual Studio 需要一个“WithEvents”变量。
  • 建议先通过表单捕捉键盘事件,再通过控件捕捉,所以建议你使用:Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Form1.KeyUp
  • 我找到了一个完美的解决方案,我所做的只是从另一个类(在 keyup sub 的末尾)调用一个 sub 并将 e 作为参数。从外部 sub 我可以执行许多 if 语句而不会拥挤主 keyup sub :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
相关资源
最近更新 更多