【发布时间】:2011-09-19 00:42:32
【问题描述】:
好的,所以我有了这个角色,我希望它能够顺利移动。我有它的行走动画,由 6 个精灵驱动,这就是动画现在的运作方式:
首先,我有一个 KeyDown 子:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
...
Select Case KeyCode
Case vbKeyLeft: 'move left
MoveLeft Character, Speed
Case vbKeyRight: 'move right
MoveRight Character, Speed
Case vbKeyUp: 'jump
Jump Character
Case vbKeyDown:
Duck Character
End Select
...
End Sub
Select 然后在按下右或左箭头键时触发 MoveLeft/MoveRight 功能。
Public Function MoveRight(Character As Image, Speed As Integer)
SaveSetting "MLP", "Game", "direction", "right"
Character.Left = Character.Left + Speed
Select Case GetSetting("MLP", "Game", "right_animation", 0)
Case 0:
Character.Picture = LoadPicture(App.Path & "\images\characters\" & GetSetting("MLP", "Game", "pony", "twilight") & "\sprite_27.gif")
SaveSetting "MLP", "Game", "right_animation", 1
Case 1:
Character.Picture = LoadPicture(App.Path & "\images\characters\" & GetSetting("MLP", "Game", "pony", "twilight") & "\sprite_28.gif")
SaveSetting "MLP", "Game", "right_animation", 2
Case 2:
Character.Picture = LoadPicture(App.Path & "\images\characters\" & GetSetting("MLP", "Game", "pony", "twilight") & "\sprite_29.gif")
SaveSetting "MLP", "Game", "right_animation", 3
Case 3:
Character.Picture = LoadPicture(App.Path & "\images\characters\" & GetSetting("MLP", "Game", "pony", "twilight") & "\sprite_30.gif")
SaveSetting "MLP", "Game", "right_animation", 4
Case 4:
Character.Picture = LoadPicture(App.Path & "\images\characters\" & GetSetting("MLP", "Game", "pony", "twilight") & "\sprite_31.gif")
SaveSetting "MLP", "Game", "right_animation", 5
Case 5:
Character.Picture = LoadPicture(App.Path & "\images\characters\" & GetSetting("MLP", "Game", "pony", "twilight") & "\sprite_32.gif")
SaveSetting "MLP", "Game", "right_animation", 0
End Select
End Function
只有一个功能,因为两者是相同的。现在,我想在这里添加一个延迟,100 毫秒。我发现了一个暂停功能:
Public Function Pause(Milliseconds As Single)
Dim T As Single, t2 As Single
T = GetTickCount(): t2 = GetTickCount()
Do Until t2 - T >= Milliseconds
t2 = GetTickCount(): Sleep 1: DoEvents
Loop
End Function
这个暂停功能很好用,但由于某种原因在这种情况下不能。我试过在Form_KeyDown Select中触发功能之前暂停,我在每张图片更改之前都尝试过,我在每张图片更改后都尝试过,我在MoveRight / MoveLeft中的Select之前尝试过,但它们都不会产生动画,就像角色只是在没有精灵变化/动画的情况下滑动一样。可能是什么问题,我该如何解决?
如果您想知道它在没有 Pause 的情况下会做什么,就像我在此处发布的代码一样,它有动画但非常快,您会注意到精灵的变化,它看起来有动画但不流畅,它的速度非常快。
【问题讨论】:
-
你真的需要使用注册表(
GetSetting/SaveSetting)来存储当前的精灵吗?哦,你想加载和缓存图像。 -
@Deanna 如何在 VB6 中缓存图像?
-
创建一个
StdPicture对象数组,并将每个对象分配给数组的一个成员。 ` RedIm Sprites(5) For Index = 0 To 5 Set Sprites(Index) = LoadPicture(App.Path & "\images\charactersmages\characters\twilight\sprite_" & cstr(27 + Index) & ".gif") Next ` -
我不完全理解你为 stdPicture 创建一个数组是什么意思。
-
这就是为什么我给出了一个代码示例(但所以把它搞砸了)。网上有很多VB6中使用数组的例子。您可能想复习基本的编程结构。