去這裏的路,是提高你的小妖精(和其他字符)處理的?你的程序從函數到適當的類,所以它們可以有內部狀態。
每一個這樣的類他們可以有它們在每場比賽幀更新,哪些變量觸發一個動作,當計數到達值。
這個解決方案不是增加併發線程只是定時會計cleanr,正確地完成,可導致應用程序設計至極將大力發展,擴大和保持幸福。
您可以採用的樣式的簡短示例,保留代碼中的功能。 (請注意,您可以使用pygame.sprite.Sprite類有「更新」方法authomaticaly呼籲每個對象組 - 我會做從頭波紋管)
frame_delay = 20
class Goblin(object):
def __init__(self):
self.x = 1 #or whatever
self.y = 1 #or whatever
self.movement_count = 0
self.move_at_each = 10
def move(self):
self.movement_count += 1
if self.movement_count < self.move_at_each:
return
self.movement_count = 0
self.x += 32
在你的主循環中,你實例化一個哥布林:
goblin = Goblin()
,在進入while循環之前,並且在每一幀調用goblin.move()
。 這樣你就可以擁有一個合適的地精類,這將允許你在遊戲中擁有多個「地精」 - 而你的例子中的代碼將要求你對每個字符進行硬編碼。你只需在遊戲的每一幀都調用「goblin.move」方法。上面的例子被調整以移動每個10幀,但是你可以改變它(並且可以改變你實例化的每個單獨的精靈)。如上所述,pygame提供了「Sprite」和「sprite groups」類作爲這種機制的框架,但在一些較小的遊戲中滾動你自己將有助於你更好地理解需求和pygame精靈已經提供了,這樣你就可以在以後的項目(或項目的後期階段)使用它們
使用多線程 –
一個不需要多線程的這個事件循環與定時器支持也是成熟的技術 –
儘管Pygame沒有內置的事件循環提供支持。實現它很容易 - 但比具有支持打字的字符基類更復雜。多線程對於這個問題的確是錯誤的。 – jsbueno