2016-12-27 72 views
0

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

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

您是什么意思_“freeze a sprite”_?为了让它停止移动? –

+0

是的,可以冻结一段时间并能够移动其他精灵。 – StrozeR

+0

精灵只是图像,所以这一切都取决于你如何blit他们。我不知道你的程序如何工作,但我猜你的精灵有速度变量?只需将该变量设置为要冻结的sprite上的0,就会有一个计时器检查,直到某个时间过去,然后将速度设置回原来的值。 –

回答

0

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

这对于简单的绘图示例非常棒,并且非常适合对事物进行“控制” - 但这意味着如果唯一对在屏幕上移动和更新的所有内容负责。

当你调用pygame.time.delaytime.sleep暂停整个程序 - 暂停某个对象,而不是别人,和NT都停止响应事件的唯一途径,是建立在你的代码的机制,允许单个对象暂停。

对于简单的代码,它可以是一个简单的“暂停”属性和if验证在你的精灵代码 - 你的精灵类的update方法soemthng沿着这 - 例如,给定的每秒30个更新一“帧频” ,如果您使用该方法实际更新位置,并且您的对象采取“采取措施”:

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()