当我释放一个键并快速按下另一个键时,实现游戏滞后

时间:2015-05-14 22:27:49

标签: vba keydown keyup

我想在visual basic中制作经典的砖块游戏。在对撞击球的矩形的运动进行编码时,我遇到了问题。释放钥匙时矩形滞后。当我按A,松开它并同时按下D时,音量会暂停一会儿,然后向右移动。
这是我的计划的一部分。

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If rectangleLeft = True And RectangleShape1.Left >= Me.ClientRectangle.Left + 2 Then
        RectangleShape1.Left -= 2
    End If

    If rectangleRight = True And RectangleShape1.Right <= Me.ClientRectangle.Right - 2 Then
        RectangleShape1.Left += 2
    End If
End Sub

Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyCode = Keys.A Then
        rectangleRight = False
        rectangleLeft = True
    End If

    If e.KeyCode = Keys.D Then
        rectangleLeft = False
        rectangleRight = True
    End If
End Sub

Private Sub Form1_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp

    rectangleLeft = False
    rectangleRight = False

End Sub

结束课程 强文

1 个答案:

答案 0 :(得分:0)

滞后是由重复延迟引起的,这是一个BIOS / Windows功能;通过控制面板控制。您需要做的是使用计时器检查所需键位置的状态,并在键处于按下位置时处理移动。

在计时器循环中使用此win32 API方法:     公共声明函数GetKeyPress Lib&#34; user32&#34;别名&#34; GetAsyncKeyState&#34; (ByVal key As Integer)As Integer

    Dim i As Integer = GetKeyPress(Keys.A)

未按下时为0,按下时为-32768