2017-10-21 2 views
2

나는 일종의 폭격 범을하고 있으며, 폭탄이 터지기를 시도하고 있습니다. 이 질문이 이미 존재한다면 죄송합니다. 나는 어떤 대답이라도 찾고 있었다. 그러나 나는 발견을 didnt한다. 1. 나는 폭탄 5 초 3. 폭탄이 폭발파이 게임에서 폭발하기 전에 폭탄을 투옥하십시오.

나는 폭발하기 전에 5 초 제공하는 방법을 잘 모릅니다

을 기다리는 곳 2. 폭탄을 넣어 : 같은

이 있어야한다.

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

pygame에서 타이머를 구현하는 방법을 배우려면이 [answers] (https://stackoverflow.com/questions/30720665/countdown-timer-in-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 스프라이트 및 스프라이트 그룹] (http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=en#section_13)을 살펴 보는 것이 좋습니다. – skrx