2016-12-27 67 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()