Диагональное движение PictureBox в Visual Basic - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать простую платформерскую игру в Visual Basi c как проект для школы. Хотя я понял, как перемещать изображение вверх, вниз, влево и вправо с помощью клавиш WASD, я не могу заставить PictureBox двигаться по диагонали, удерживая две клавиши. Например, PictureBox должен перемещаться по диагонали в верхнем правом углу, когда пользователь нажимает клавиши W и D. Короче говоря, как я могу перемещать PictureBox по диагонали, когда пользователь держит две клавиши?

Ниже приведен код.

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If DPressed = True Then
        PictureBox1.Left = PictureBox1.Left + 9
    ElseIf DPressed = True AndAlso WPressed = True Then
        PictureBox1.Left = PictureBox1.Left + 9
        PictureBox1.Top = PictureBox1.Top - 9
    ElseIf APressed = True Then
        PictureBox1.Left = PictureBox1.Left - 9
    ElseIf SPressed = True Then
        PictureBox1.Top = PictureBox1.Top + 9
    ElseIf WPressed = True Then
        PictureBox1.Top = PictureBox1.Top - 9
    End If
End Sub

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyCode = Keys.D Then
        DPressed = True
    ElseIf e.KeyCode = Keys.W Then
        WPressed = True
    ElseIf e.KeyCode = Keys.A Then
        APressed = True
    ElseIf e.KeyCode = Keys.S Then
        SPressed = True
    ElseIf (e.KeyCode And Not Keys.Modifiers) = Keys.D AndAlso e.Modifiers = Keys.W Then
        DPressed = True
        WPressed = True
    End If
End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
    If e.KeyCode = Keys.D Then
        DPressed = False
        WPressed = False
    ElseIf e.KeyCode = Keys.W Then
        WPressed = False
    ElseIf e.KeyCode = Keys.A Then
        APressed = False
    ElseIf e.KeyCode = Keys.S Then
        SPressed = False
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Возможно, попробуйте пометить переменные DPressed, WPressed, APressed как Shared .

0 голосов
/ 29 апреля 2020

Например

Private wDown As Boolean = False
Private aDown As Boolean = False
Private sDown As Boolean = False
Private dDown As Boolean = False

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    Select Case e.KeyCode
        Case Keys.W
            wDown = True
        Case Keys.A
            aDown = True
        Case Keys.S
            sDown = True
        Case Keys.D
            dDown = True
    End Select
End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    Select Case e.KeyCode
        Case Keys.W
            wDown = False
        Case Keys.A
            aDown = False
        Case Keys.S
            sDown = False
        Case Keys.D
            dDown = False
    End Select
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim xIncrement = 0
    Dim yIncrement = 0

    If wDown Then
        yIncrement -= 9
    End If

    If aDown Then
        xIncrement -= 9
    End If

    If sDown Then
        yIncrement += 9
    End If

    If dDown Then
        xIncrement += 9
    End If

    PictureBox1.Location += New Size(xIncrement, yIncrement)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...