它应该很容易。
如果您将帧编号记录在一个变量中,则可以使用帧数来对其进行取模,以获得要显示的动画帧编号。
frame_count = 0
animation_frames = 4
while quit == False:
# ...
# snip
# ...
area = pygame.Rect(
image_number * 100,
(frame_count % animation_frames) * 150,
100,
150
)
display.blit(sprite, sprite_pos, area)
pygame.display.flip()
frame_count += 1
如果不同的动作具有不同数量的帧,则在更新image_number时必须更新animation_frames。
另外,这里假定可以播放任何帧的动画。如果不是这种情况下,你需要记录帧数是什么时,行动开始,和模数从之前帧计数借此远:
area = pygame.Rect(
image_number * 100,
((frame_count - action_start_frame) % animation_frames) * 150,
100,
150
)
的注意事项你的事件处理。如果你按住左边的按钮并右击,但保持按住左边,则精灵将停止移动,因为您处理的上一个事件是一个关键事件,尽管事实上我仍然处于左侧。
如果这不是您想要的,您可以通过记录您感兴趣的按键的上/下状态或使用接口来解决此问题。
另一方面,你似乎是要瞄准固定的帧速率,同时根据最后一帧所用的时间来确定移动精灵的距离。在我看来,这可能并不理想。
2D动作游戏通常需要以可预测的方式工作。如果某些CPU繁重进程在计算机的后台启动并导致游戏无法每秒刷出60帧,则可能最好减慢速度,而不要让对象开始跳过帧之间的巨大距离。想象一下,如果这发生在像Metal Slug这样的2D动作游戏中,那么你不得不四处避开子弹?
这也使得任何物理计算都简单得多。你必须根据它是什么类型的游戏来进行判断。
这个问题很混乱。请阅读文本并将其清除,以便我们了解您想要的内容。 – 2009-04-10 11:14:32