2012-05-29 53 views
2

這是我的嘗試:如何讓一個Python函數在遊戲的其餘部分繼續時睡眠一段時間?

if len(wormCoords) > 2: 
    time.sleep(4) 
    del wormCoords[-1] 

但隨後整場比賽(我做一個簡單的「蛇」遊戲)去除蛇的最後部分之前睡,持續4秒。計劃是每4秒去掉蛇的最後一部分,這樣你就可以不斷地吃蘋果(當你這樣做時,蛇會增長一個),否則你就會死(這條蛇變得飢餓和餓死)。

完整的代碼可以在這裏找到:http://inventwithpython.com/pygame/chapter6.html 但我正在做一些改變。

+1

文檔這可能是明確提及您正在使用pygame的一個好主意。我建議你添加pygame標籤。 –

+0

線程模塊? –

+0

@mplourde我認爲對這個問題使用多線程aproche是不是要走的路。對於很多問題,沒有優勢... – kratenko

回答

4

在這裏做的正確的事情被設置在設置代碼中使用此計時器事件

SHRINKSNAKE = pygame.USEREVENT+0 

這正好在runGame功能後direction = RIGHT

pygame.time.set_timer(SHRINKSNAKE, 4*1000) 

和(行HEAD = 0後)這在事件處理循環中runGame之前行elif event.type == KEYDOWN:elif s應該排隊

elif event.type == SHRINKSNAKE: 
    if len(wormCoords) > 2: 
    del wormCoords[-1] 

有關詳情,請上pygame.time.set_timer

+0

對不起,我對Python有點新。什麼是設置代碼?感謝您花時間:) –

+0

它說,當我運行它「你的程序中有一個錯誤:預計一個縮進塊」..我做錯了什麼? –

+0

@SebastianAnving如果您還沒有弄明白,我已經編輯了答案,以便在相關問題 –

-1

如果您不想讓其他應用程序在調用「睡眠」時暫停,則需要使用線程(請參閱http://docs.python.org/library/threading.html)。由於需要在線程之間共享「wormCoords」變量,因此在更新線程時需要格外小心,以避免競爭狀況。

+2

雖然使用線程模塊可以使其工作,但它比使用pygame計時器要困難得多 –

2

檢查出pygame.time.set_timer函數。這可以讓您每隔幾毫秒觸發一個事件,您可以使用您的典型事件處理機制來處理事件(就像處理鼠標移動,鍵盤,繪製等一樣)。閱讀pygame.event文檔以獲取有關處理事件的更多信息。

相關問題