Vb.net visual basic中的播放器移动会导致暂停

Vb.net visual basic中的播放器移动会导致暂停,vb.net,game-physics,Vb.net,Game Physics,我在Visual Basic中创建了自己的播放器移动,因此我有一个图片盒,我将图片导入其中,然后通过以下方式使用箭头键创建移动: 公开课表格1 Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyData = Keys.Right Then Player.Left += 3

我在Visual Basic中创建了自己的播放器移动,因此我有一个图片盒,我将图片导入其中,然后通过以下方式使用箭头键创建移动: 公开课表格1

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyData = Keys.Right Then
        Player.Left += 3
    End If

    If e.KeyData = Keys.Left Then
        Player.Left -= 3
    End If

    If e.KeyData = Keys.Up Then
        Player.Top -= 3
    End If

    If e.KeyData = Keys.Down Then
        Player.Top += 3
    End If
    Refresh()

End Sub

唯一的问题是,在移动之前有一个小的停顿。我不知道你们是否意识到,但当钥匙放下的时候,那个家伙停顿了一下,好像他知道他必须向上/向下/向左/向右移动,但他不能。最后,他在暂停后终于移动到指定的区域。我似乎不明白为什么…

这是写作时重复的速度。如果你打开单词,拿着一个字母,也是一样的。先写一个,过一段时间它就会重复。您应该使用SDK来制作游戏,而不是那样做,但这解决了您的问题:

使用计时器并检查按下的键,而不是使用该事件。这将允许您在同一时间(对角线方向)向太多的方向移动,或同时按多个键所需的更多操作

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If GetKeyState(87) < 0 OrElse GetKeyState(38) < 0 Then : Player.Top -= iVel
    ElseIf GetKeyState(65) < 0 OrElse GetKeyState(37) < 0 Then : Player.Left -= iVel
    ElseIf GetKeyState(68) < 0 OrElse GetKeyState(39) < 0 Then : Player.Left += iVel
    ElseIf GetKeyState(83) < 0 OrElse GetKeyState(40) < 0 Then : Player.Top += iVel
    End If 
End Sub

希望这有帮助。顺便说一下,我发布的代码将使用箭头键和WASD键。

我得到的唯一错误是kreypressed未定义,iVel未声明,请帮助?@JackC。不要使用
按键
,这只是我在代码中使用的东西。iVel只是一个整数,用来确定它的移动速度,只需将它改为你想要的数字。
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As IntPtr) As Short