我在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关闭的时候,那个家伙停顿了一下,好像他知道他必须向上/向下/向左/向右移动,但不能。最后他终于在停顿后移动到指定区域。我似乎无法找出原因是什么......
答案 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键。