视觉基础中的玩家移动导致暂停

时间:2013-02-19 03:25:42

标签: vb.net game-physics

我在Visual Basic中创建了自己的玩家动作,所以我有一个图片框,我将图片导入,然后用箭头键创建了动作: 公共类Form1

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

唯一的问题是,在运动前有一点停顿。我不知道你们是否意识到,但是当Key关闭的时候,那个家伙停顿了一下,好像他知道他必须向上/向下/向左/向右移动,但不能。最后他终于在停顿后移动到指定区域。我似乎无法找出原因是什么......

1 个答案:

答案 0 :(得分:1)

写作时的重复速度。如果你打开单词并持一封信也一样。首先写一个,一段时间后重复。您应该使用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

我建议您使用非常低的时间间隔(如20左右)。用于获取按键的功能必须定义它:

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As IntPtr) As Short

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