1

我正在为课堂编写游戏,玩家所做的是使用“wasd”从追逐的鲨鱼中游走。我的运动代码是

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    Select Case e.KeyCode

        Case Keys.W
            If picSwimmer.Location.Y > -5 Then
                Loc = New Point(picSwimmer.Location.X, picSwimmer.Location.Y - 15)
                picSwimmer.Location = Loc
            End If
        Case Keys.S
            End If
            If picSwimmer.Location.Y < Me.Height Then
                Loc = New Point(picSwimmer.Location.X, picSwimmer.Location.Y + 15)
                picSwimmer.Location = Loc
            End If

(我对 a&d 也有相同的设置)。我的问题是,当您按住其中一个“wasd”键时,图像会稍微移动然后停止,然后在大约一秒钟后开始流畅地移动。我认为这是由于 VB 需要花费大量时间来识别一个键被按下,而不是被单击一次。我将如何做到这一点,以便 VB 将注册键从一开始就被按住,或者缩短识别它被按住的事实所需的时间?或者任何可以使按键一按下就使运动平稳的东西?

4

3 回答 3

2

您需要的是GetAsyncKeyState一个不断运行的计时器或线程,它查询所有键并触发您需要的功能(一个“步骤”,您必须与计时器的间隔对齐,只要按住键)。这也是您可以同时处理更多密钥的唯一方法(我知道)。
而且它独立于焦点(所以也许你应该检查正确的元素是否有焦点)。

基本:

Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Int32) As UShort
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    If GetAsyncKeyState(Convert.ToInt32(Keys.D)) Then Label1.Text = "RIGHT" Else Label1.Text = "-"
    If GetAsyncKeyState(Convert.ToInt32(Keys.W)) Then Label2.Text = "UP" Else Label2.Text = "-"
End Sub
于 2012-10-14T08:25:56.377 回答
2

在按住另一个键的同时按下第二个键的情况下使用GetAsyncKeyState会好得多。

例如:

假设一个玩家是:

  • 按住向上键移动他的坦克
  • 并按空格键射击

如果您使用了该Keydown事件,一旦玩家按下空格键,坦克将停止移动。

要再次开始移动,他必须在每次射击后释放箭头并重新按下向上键。

Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Int32) As UShort
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If GetAsyncKeyState(Convert.ToInt32(Keys.Up)) Then
    ''put here codes for moving the tank
End If

If GetAsyncKeyState(Convert.ToInt32(Keys.Space)) Then
    ''PUT HERE CODES FOR TANK FIRE
End If

End Sub
于 2014-02-10T01:37:21.097 回答
1

它不是 Visual Basic 设置,它是 Windows 设置,Keybaord Properties您需要缩短Repeat Delay Time它会影响计算机上的所有应用程序。

在此处输入图像描述

于 2012-10-14T02:08:13.983 回答