2009-04-10 30 views
3

经过一些代码的调整,我从某人得到一个字符图像的方向和上下左右输入,我已经把它放在一起:(希望代码不太杂乱)Pygame:雪碧动画理论 - 需要反馈

Character Move Code + IMG

精灵片只运行长度,所以基本上每个精灵部分是不同的操作。现在有没有办法让一个代码与当前的代码一起从一组“动作”中循环下来以制作动画?

例如: “运行左派”是精灵3.所以后来经过我们指定的列会是可能的循环下来怎么过运行动画的许多帧(可以说4)为了使动画?

示例图片: alt text http://animania1.ca/ShowFriends/dev/example.jpghttp://animania1.ca/ShowFriends/dev/example.jpg

+0

这个问题很混乱。请阅读文本并将其清除,以便我们了解您想要的内容。 – 2009-04-10 11:14:32

回答

4

它应该很容易。

如果您将帧编号记录在一个变量中,则可以使用帧数来对其进行取模,以获得要显示的动画帧编号。

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动作游戏中,那么你不得不四处避开子弹?

这也使得任何物理计算都简单得多。你必须根据它是什么类型的游戏来进行判断。

+0

非常感谢您的意见。我同意你所说的关于表演和什么的一切。我从提供给我的免费代码和建议中学习了所有这些内容。有什么你可以指导我去学习那些能够更好地满足我需要的东西吗? – RamonLion 2009-04-10 11:47:47