2014-01-11 34 views
0

我開發一款遊戲,和我的blit一個文本到屏幕如下:pygame的從表面刪除的東西,並保持一個定時器它withhout暫停遊戲

message = font.render("Hello World" , True) 
surface_1.blit(message, some_rect) 

所以屏幕的消息「上你好世界「現在正在出現。我需要的是持續幾秒鐘,然後隱藏它的方式。我認爲一個簡單的方法是創建一個變量來計算循環的每一個回合,當計數器達到幾輪(這將等於時間,100輪= 1秒),然後通過改變來隱藏該消息消息爲空字符串,如:""

我嘗試這種方法,但我需要一些不同的東西,首先是一種真正從表面刪除消息的方法,以及一種更好的方法來保存消息的時間,但這種更好的方式我不想停止其他的東西,我會在遊戲中添加(稍後)。

例如,將使用圖片的各種不同狀態進行動畫製作動畫(人走路)的精靈。所以睡覺/暫停遊戲幾秒鐘不是一個好主意。

回答

0

無法從表面刪除某些東西。由於表面沒有關於其上的物體的信息。

這大致是pygame的結構應該如何:

init() 
while playing: 
    drawVisibleSprites() 
    updateGame() 
    getPlayerInput() 

比方說,你要顯示的字符串「Hello World」,持續5秒。

我想要做的是創建一個VolatileSprite類,它將有一個Sprite和一個計時器對象。 然後循環查看時間是否已經過去,如果我計劃刪除對象。

由於我們需要一種方法來知道已經過了多少時間,我們可以使用pygame.time.Clock()。 此課程有一個方法tick(),它返回上一次致電tick()後的ms數量。這個所謂的時間增量,可以傳遞給各種功能來更新精靈。

回到我們的VolatileSprite。在VolatileSprite的update(delta)方法中,您可以檢查時間是否已經過去,如果是,則可以將其設置爲已刪除。這樣,在你的主代碼中,你可以遍歷所有的精靈並刪除那些應該被刪除的精靈。

動畫原理相同,AnimatedSprite會有一個定時器,當一定數量的ms通過時,它會改變要繪製的圖片。