0

我已经在 Visual Basic 中创建了自己的玩家动作,所以我有一个图片框,我将图片导入其中,然后我使用箭头键通过以下方式创建了动作:Public Class 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 按下的时候,这家伙停顿了一下,好像他知道他必须向上/向下/向左/向右移动,但不能。最终,他终于在停顿后移动到了指定区域。我似乎无法找出这是为什么...

4

1 回答 1

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 键一起使用。

于 2013-02-19T08:47:33.473 回答