2013-02-19 75 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