2013-02-19 63 views
0

我已经创建在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 

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

回答

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键。

+0

我得到的唯一错误是kreypressed未定义,iVel未声明,请帮忙? – 2013-02-25 09:51:22

+0

@JackC。不要使用'keypressed',只是我在代码中使用的东西。而'iVel'只是一个Integer来决定它移动的速度,只需将它改为你想要的数字即可。 – SysDragon 2013-02-25 09:54:30