Gif动画在KeyPress事件上停止

时间:2018-10-01 19:03:24

标签: vb.net winforms gif

我正在Visual Studio中开发一个小型的Super Mario游戏。我拍了2张照片,其中第一张是马里奥站立(png,不动),第二张是马里奥奔跑(gif,3帧)。问题是,当我不断按下“向右”按钮时,gif内的3帧仅被处理一次,然后停止移动。

Private Sub Level1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
  Select Case e.KeyCode
    Case Keys.Right
      picBoxMario.Image = My.Resources.mario_running_right
  End Select
End Sub

Private Sub Level1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
  picBoxMario.Image = My.Resources.mario_standing_2
End Sub

1 个答案:

答案 0 :(得分:1)

插入布尔检查。因此,如果Mario已经在运行,则无需再次运行它:)。
否则,您的PictureBox将仅继续显示第一帧,因为您会不断地重复播放相同的动画。

(我假设Level1FormKeyPreview = True

正如汉斯·帕森特(Hans Passant)在评论中指出的那样,将这些Image资源分配给类对象是一个(绝不止)个好主意,然后您可以在.Dispose()不再需要它们时使用它们。
< / p>

更新:基于注释,使用类对象进行相等性比较,可以进一步简化动画状态检查。

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
相关问题