python-Pygame:精灵动画理论-需要反馈

在对一些代码进行了一些调整之后,我从某人那里得到了一个使字符图像沿其方向移动的信息,并且上下左右输入我将它们放在一起:(希望代码不太混乱)

Character Move Code + IMG

Sprite工作表仅沿长度方向运行,因此基本上每个Sprite部分都是不同的动作.现在是否有一种方法可以使我的代码与当前代码一起工作,以从一组“动作”中循环下来以制作动画?

例如:
“左转”是精灵3.因此,在指定该列之后,可以循环播放多少帧动画(让我们说4个)以制作动画?

图片示例:
python-Pygame:精灵动画理论-需要反馈 http://animania1.ca/ShowFriends/dev/example.jpg

解决方法:

应该很容易.

如果您将帧号记录在变量中,则可以用要获得要显示的动画帧号的帧数取模.

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
    )

关于事件处理的注释.如果按住(例如向左),然后向右轻按,但继续向左按住,则精灵将停止移动,因为您处理的最后一个事件是按键事件,尽管我仍然向左按住.

如果这不是您想要的,可以通过记录感兴趣的键的上/下状态或使用pygame.key.get_pressed界面来解决.

另一个要注意的是,您似乎希望获得固定的帧速率,并同时根据上一帧所花费的时间来确定将精灵移动多远.我认为这可能不理想.

2D动作游戏通常需要以可预测的方式工作.如果某些CPU繁重的进程在计算机的后台启动,导致游戏不再能够每秒处理60帧,则最好放慢速度,而不是让对象开始跳过帧之间的较大距离.试想一下,如果这发生在诸如《合金弹头》这样的2D动作游戏中,而您则不得不四处躲避子弹?

这也使任何物理计算都更加简单.您必须根据游戏的类型做出判断.

上一篇:cocos creator编写2048小游戏,发微信小游戏


下一篇:android-LibGDX-自定义类的精灵未显示