我正在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
答案 0 :(得分:1)
插入布尔检查。因此,如果Mario已经在运行,则无需再次运行它:)。
否则,您的PictureBox
将仅继续显示第一帧,因为您会不断地重复播放相同的动画。
(我假设Level1
是Form
和KeyPreview = 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