2017-10-21 71 views
2

我正在做一種炸彈人,我正試圖做一些炸彈爆炸後一段時間。很抱歉如果這個問題已經存在。我一直在尋找任何答案,但我沒有找到。給pygame爆炸前炸彈的時間

這應該是這樣的:1。 我放了炸彈的地方 2.炸彈等待5秒 3.炸彈爆炸

我不知道如何給前5秒爆炸。

class bomb(object): 
def __init__(self, aposX, aposY, bombRange = 5): 
    self.posX = aposX 
    self.posY = aposY 
    self.bombRange = bombRange 
    self.timeToExplode = 5000 
    pygame.draw.circle(ventana,(200,0,0),(self.posX,self.posY),20) 


def update(self): 
    pygame.draw.circle(ventana,(200,0,0),(self.posX,self.posY),20) 

    #Here should wait 5 seconds and then call the explde method 
    self.explode() 

def explode(self): 
    pygame.draw.line(ventana,(200,0,0),(self.posX,self.posY),(self.posX+20+(40*self.bombRange),self.posY),40) 
    pygame.draw.line(ventana,(200,0,0),(self.posX,self.posY),(self.posX-20-(40*self.bombRange),self.posY),40) 
    pygame.draw.line(ventana,(200,0,0),(self.posX,self.posY),(self.posX,self.posY+20+(40*self.bombRange)),40) 
    pygame.draw.line(ventana,(200,0,0),(self.posX,self.posY),(self.posX,self.posY-20-(40*self.bombRange)),40) 

我希望你能幫助我,我會明白這一點。

+0

你能粘貼你遊戲的主循環代碼嗎?或者你在哪裏調用炸彈的更新方法? –

+0

查看這些[答案](https://stackoverflow.com/questions/30720665/countdown-timer-in-pygame)瞭解如何在pygame中實現一個計時器。 – skrx

回答

1

下面是dt變體的一個小例子。我通過dtupdate方法,我用它來減少計時器屬性。在主循環中,如果計時器低於0,我只畫出爆炸線。要除去實例,我把爆炸炸彈放到一個集合中,我從包含所有炸彈實例的bomb_set中減去。

import pygame 


class Bomb(object): 
    def __init__(self, aposX, aposY, bombRange=5): 
     self.posX = aposX 
     self.posY = aposY 
     self.bombRange = bombRange 
     self.timeToExplode = 3000 

    def update(self, dt): 
     # Subtract the passed time `dt` from the timer each frame. 
     self.timeToExplode -= dt 

    def explode(self, screen): 
     pygame.draw.line(screen,(200,0,0),(self.posX,self.posY),(self.posX+20+(40*self.bombRange),self.posY),40) 
     pygame.draw.line(screen,(200,0,0),(self.posX,self.posY),(self.posX-20-(40*self.bombRange),self.posY),40) 
     pygame.draw.line(screen,(200,0,0),(self.posX,self.posY),(self.posX,self.posY+20+(40*self.bombRange)),40) 
     pygame.draw.line(screen,(200,0,0),(self.posX,self.posY),(self.posX,self.posY-20-(40*self.bombRange)),40) 

    def draw(self, screen): 
     pygame.draw.circle(screen,(200,0,0),(self.posX,self.posY),20) 


def main(): 
    screen = pygame.display.set_mode((640, 480)) 
    clock = pygame.time.Clock() 
    bomb_set = set() # This set holds the bomb instances. 

    done = False 

    while not done: 
     # Get the passed time since last clock.tick call. 
     dt = clock.tick(30) 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       done = True 
      elif event.type == pygame.MOUSEBUTTONDOWN: 
       if event.button == 1: 
        bomb_set.add(Bomb(*event.pos)) 

     # Game logic. 
     to_remove = set() 

     # Update bombs. Pass the `dt` to the bomb instances. 
     for bomb in bomb_set: 
      bomb.update(dt) 
      # Add old bombs to the to_remove set. 
      if bomb.timeToExplode <= -3000: 
       to_remove.add(bomb) 

     # Remove bombs fromt the bomb_set. 
     if to_remove: 
      bomb_set -= to_remove 

     # Draw everything. 
     screen.fill((30, 30, 30)) 
     for bomb in bomb_set: 
      bomb.draw(screen) 
      # I'm just drawing the explosion lines each 
      # frame when the time is below 0. 
      if bomb.timeToExplode <= 0: 
       bomb.explode(screen) 

     pygame.display.flip() 


if __name__ == '__main__': 
    pygame.init() 
    main() 
    pygame.quit() 
+0

我建議看一看[pygame sprites和sprite groups](http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=en#section_13)。 – skrx