Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame:精灵动画理论-需要反馈_Python_2d_Pygame_Sprite - Fatal编程技术网

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

Python Pygame:精灵动画理论-需要反馈,python,2d,pygame,sprite,Python,2d,Pygame,Sprite,在对一些代码进行了一些调整后,我从某人那里得到了一些字符图像,使其在方向和上下左右输入上移动,我把这些代码放在一起:(希望代码不要太乱) 精灵表仅纵向运行,因此基本上每个精灵部分都是不同的动作。现在,有没有一种方法可以让我的代码与当前代码一起工作,从设置的“动作”循环下来,从而制作动画 例如: “向左跑”是精灵3。那么,在我们指定了那个列之后,是否有可能循环运行动画的多少帧(比如说4帧)来制作动画呢 示例图片: 这应该很容易 如果在变量中记录帧编号,则可以将其与要显示的动画帧编号所需的帧数进行

在对一些代码进行了一些调整后,我从某人那里得到了一些字符图像,使其在方向和上下左右输入上移动,我把这些代码放在一起:(希望代码不要太乱)

精灵表仅纵向运行,因此基本上每个精灵部分都是不同的动作。现在,有没有一种方法可以让我的代码与当前代码一起工作,从设置的“动作”循环下来,从而制作动画

例如: “向左跑”是精灵3。那么,在我们指定了那个列之后,是否有可能循环运行动画的多少帧(比如说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
如果不同的动作具有不同的帧数,则在更新图像编号时必须更新动画\u帧

此外,这假定可以从任何帧开始播放动画。如果不是这样,则需要记录操作开始时的帧数,并将其从模前的帧数中删除:

    area = pygame.Rect(
        image_number * 100,
        ((frame_count - action_start_frame) % animation_frames) * 150,
        100,
        150
    )
关于事件处理的说明。如果按住左键,然后点击右键,但按住左键,精灵将停止移动,因为您处理的最后一个事件是keyup事件,尽管我仍然按住左键

如果这不是您想要的,您可以通过记录您感兴趣的键的向上/向下状态,或者使用接口来绕过它

另一方面,您的目标似乎是固定帧速率,同时根据上一帧中所用的时间确定精灵移动的距离。在我看来,这可能并不理想

2D动作游戏通常需要以可预测的方式运行。如果某个CPU密集的进程在计算机的后台启动,导致游戏无法再每秒输出60帧,那么最好让游戏速度减慢,而不是让对象开始跳过帧之间的巨大距离。想象一下,如果这发生在一个2D动作游戏中,比如《金属弹头》,你不得不四处跳跃以躲避子弹


这也使得任何物理计算变得更简单。你必须根据游戏类型做出判断。

这个问题非常令人困惑。请阅读课文并将其整理清楚,以便我们了解您的需求。非常感谢您的输入。我同意你所说的关于演出的一切。我从免费代码的参考资料和给我的建议中学到了所有这些东西。你有什么可以指导我的,学习的东西,将功能更好地满足我的需要吗?不幸的是,我还没有找到任何真正好的教程。我建议你阅读任何看起来合适的文章,但请记住,仅仅因为人们在互联网上发表了他们的作品,他们不一定是专家。最重要的是让它工作起来,你可以稍后再清理。这是真的。那么我需要做什么改变才能取出旧的并添加到pygame.key.get_中呢。另外,如何将帧速率设置为可变?您想要可变帧速率还是固定帧速率?我建议修复在大多数2D游戏中可能更好。忽略Clock.ticks的返回值,并假设每个帧所用的时间相同,而不是找出最后一帧渲染所用的时间。我的项目计划是制作一个megaman X风格的侧边滚动器/平台成型器。一个固定的帧速率可能是好的,因为屏幕上不会有数百万的东西。我怎么能无视这些滴答声呢?但是设置帧率呢?