Вставьте логический чек.Так что, если Mario уже запущен, вы не сможете запустить его снова:).
В противном случае ваш PictureBox
будет продолжать показывать только первый кадр, потому что вы продолжаете показывать одну и ту же анимацию снова и снова.
(я полагаю, Level1
- это Form
и KeyPreview = True
)
Как отметил Ганс Пассант в комментариях, это (более чем) хорошая идея назначить эти Image
Ресурсы для объектов классов, которые можно затем .Dispose()
, когда они больше не нужны.
ОБНОВЛЕНИЕ: на основе комментариев сравнение на равенство с использованием объекта класса позволяет еще больше упростить проверку состояния анимации..
Private MarioRunning As Image = My.Resources.mario_running_right
Private MarioStanding As Image = My.Resources.mario_standing_2
Private Sub Level1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
picBoxMario.Image = MarioStanding
End Sub
Private Sub Level1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Right
If picBoxMario.Image.Equals(MarioRunning) Then Return
picBoxMario.Image = MarioRunning
End Select
End Sub
Private Sub Level1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
picBoxMario.Image = MarioStanding
End Sub
Вы можете использовать события FormClosing()
или FormClosed()
вашего Form
для утилизации изображений.
Private Sub Level1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
If MarioRunning IsNot Nothing Then MarioRunning.Dispose()
If MarioStanding IsNot Nothing Then MarioStanding.Dispose()
End Sub