【问题标题】:How to freeze a sprite for a certain amount of time in pygame?如何在pygame中冻结精灵一段时间?
【发布时间】:2016-12-27 16:02:54
【问题描述】:

由于导入模块“时间”并使用 time.sleep(seconds) 冻结了整个屏幕。如何将精灵冻结 3、4 或 5 秒?我试过这样做,但它会将整个 pygame 冻结 3 秒!

elif event.key == pygame.K_q:
time.sleep(3)

【问题讨论】:

  • 你说的“冻结一个精灵”是什么意思?让它停止移动?
  • 可以冻结一段时间并能够移动其他精灵。
  • Sprite 只是图像,所以这完全取决于您如何对它们进行 blit。我不知道你的程序是如何工作的,但我猜你的精灵有一个速度变量?只需在要冻结的精灵上将该变量设置为 0,进行计时器检查,直到某个时间过去,然后将速度设置回原来的值。

标签: python python-3.x pygame


【解决方案1】:

在 Pygame 中,您负责“主循环”,因此负责游戏的所有时间管理。

这非常适合简单的绘图示例,也非常适合“控制”事物 - 但这意味着 if 是对屏幕上移动和更新的所有内容的唯一责任。

当您调用 pygame.time.delaytime.sleep 时,您会暂停整个程序 - 暂停某个对象而不是其他对象并且根本停止响应事件的唯一方法是在您的代码中构建机制,允许个人对象暂停。

对于简单的代码,它可以是一个简单的“暂停”属性和一个 if 验证在你的精灵代码中 - 例如,给定每秒 30 次更新的“帧速率” - 沿着这个在你的精灵类的 @ 987654324@ 方法,如果您使用该方法实际更新位置并使用您的对象“采取行动”将是:

class MySprite(BaseSprite):
    def __init__(self, ...):
        self.pause = 0...

    def update(self):
        if self.pause:
            self.pause -= 1
            return 

def main():
   FRAMERATE = 30
   myobject = MySprite(...)

   while True:
       if ...:
           ...

       elif event.key == pygame.K_q:
             myobject.pause = 3 * FRAMERATE
       for obj in all_my_objs:
             obj.update()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多