如何在按下两个方向键时对角移动对象?怎么做? 我尝试在一起处理向上和向右添加elseif语句但是当我将它们按在一起时它仍然向上或向右移动
Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Right Then
Label1.Location = New Point(Label1.Location.X + 5, Label1.Location.Y)
ElseIf e.KeyCode = Keys.Left Then
Label1.Location = New Point(Label1.Location.X - 5, Label1.Location.Y)
ElseIf e.KeyCode = Keys.Down Then
Label1.Location = New Point(Label1.Location.X, Label1.Location.Y + 5)
ElseIf e.KeyCode = Keys.Up Then
Label1.Location = New Point(Label1.Location.X, Label1.Location.Y - 5)
ElseIf e.KeyCode = Keys.Up And e.KeyCode = Keys.Right Then
Label1.Location = New Point(Label1.Location.X + 5, Label1.Location.Y + 5)
End If
CheckIntersections()
If Label1.Location.Y < 0 Then
Label1.Location = New Point(Label1.Location.X, Me.Height)
ElseIf Label1.Location.Y > Me.Height Then
Label1.Location = New Point(Label1.Location.X, Me.Bottom = 0)
ElseIf Label1.Location.X < 0 Then
Label1.Location = New Point(Me.Width, Label1.Location.Y)
ElseIf Label1.Location.X > Me.Width Then
Label1.Location = New Point(0, Label1.Location.Y)
End If
End Sub
答案 0 :(得分:1)
每次按下一个键时都会发生KeyDown
事件。因此,您需要记住在KeyDown
出现时按下光标键的时间,以检入另一个按下的光标键。
请记住订阅KeyUp
个事件以清除状态,因为使用时可以按一个光标键,释放它然后按另一个。
您的代码永远不会有效:
ElseIf e.KeyCode = Keys.Up And e.KeyCode = Keys.Right Then
因为这不可能是真的。 KeyCode
是单个密钥代码,它不能同时是一个密钥。