2013-11-25 39 views
0

我正在python 3.3中使用pygame製作一個小遊戲,我有一個類的敵人(見下文)。如果我想每10秒左右產生一個新敵人,理論上這場比賽可能會永遠持續下去。然而,這要求每10秒自動生成類的實例。有沒有辦法自動創建敵人類的新實例?如何在Python中自動生成類的實例?

敵對階級:

class Enemy(object): 
    def __init__(self, image, posx, posy, speed, damage): 
     self.image = image 
     self.posx = posx 
     self.posy = posy 
     self.speed = speed 
     self.damage = damage 
    def move(self): 
     self.posy = self.posy + self.speed 
    def draw(self): 
     screen.blit(self.image, (self.posx, self.posy)) 

編輯:對不起!我發佈了這個,沒有意識到我沒有完成我的解釋。我很抱歉!

回答

2

尋找到一個叫time

模塊,您需要做的是這樣的:

import time 

nSeconds = 11 
t0 = time.clock() 
dt = 0 
enemyCount = 0 

# the following would be in an appropriate 
# place in the main game loop 
if dt < nSeconds: 
    t1 = time.clock() 
    dt = t1 - t0 
else: 
    enemyInstance = Enemy() 
    enemyCount += 1 
    t0 = time.clock() 
    dt = 0 

您可以跟蹤敵人計數,以防萬一你想後發送一個特殊的波敵人數量或獎勵積分等等。

也看看這本書關於遊戲開發的Python爲其他的想法:http://inventwithpython.com/makinggames.pdf

+0

PyGame有[pygame.time.get_ticks()](http://www.pygame.org/docs/ref/time.html),所以你不需要使用'time'庫 – furas

+0

furas指出的是正確的。但在使用任何庫中的時間相關函數時要小心,以免在特定硬件配置上產生負面時間。看看:[測量在Python中耗用的時間](http://stackoverflow.com/q/7421641/1463143) – samkhan13

+0

如果我原來的問題不清楚,但我沒有問題時間方面,但與實際的敵人自動產卵;自動生成類實例。 – jakoubeck503

3

你需要在某處存儲產卵的敵人。假設它是一個列表:

enemies = [] 
... 
# every 10 secs 
enemy = Enemy() 
enemies.add(enemy) 

然後,當敵人死亡時,你想從列表中刪除它。

+0

難道他們使用'set',所以它更容易殺死時,從容器中取出的敵人嗎? – SethMMorton

+0

@SethMMorton:當然 –

1

在遊戲中,通常會有一個主遊戲循環,讀取輸入內容,進行模擬並渲染屏幕。在該循環中,您可以檢查自上次創建敵人以來已過去多少時間,如果有足夠的時間飛過,您可以創建一個。

1
# before mainloop 
enemies = [] 
time_for_next_enemy = pygame.time.get_ticks() + 10000 # 10 seconds , 1000ms = 1s 

# in mainloop 
if pygame.time.get_ticks() >= time_for_next_enemy: 
    enemy = Enemy() 
    enemies.add(enemy) 
    time_for_next_enemy = pygame.time.get_ticks() + 10000