2015-05-14 32 views
0

我想在视觉基础上做一个经典的砖块游戏。在编写碰撞球的矩形的运动时,我遇到了一个问题。释放密钥时矩形滞后。当我按下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 

末级 强文本

回答

0

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

使用在定时器回路此Win32 API的方法: 公共声明函数GetKeyPress库“USER32”别名“GetAsyncKeyState”(BYVAL键作为整数)作为整数

Dim i As Integer = GetKeyPress(Keys.A) 

我将在0未按下时和按-32768