2013-07-10 3 views
1

나는 폭발을 나타나고 사라지려고합니다. 내 문제는 그것이 나타나고 거기에 머 무르거나 전혀 나타나지 않을 것입니다. 당신은 블리트 및 이벤트 루프 내에서 대기중인다음 파이 게임에서 숨기기

#Throwing a grenade 
     if event.key == pygame.K_e and grenadeNum > 0: 
      Grenade = Explosive([Player.rect.centerx, Player.rect.centery]) 
      for i in range(4, 30): 
       Grenade.move() 
       screen.fill([105, 105, 105]) 
       screen.blit(Grenade.image, Grenade.rect) 
       screen.blit(Gun.image, Gun.rect) 
       screen.blit(Cliper.image, Cliper.rect) 
       screen.blit(Bullet.image, Bullet.rect) 
       screen.blit(Player.image, Player.rect) 
       screen.blit(BOOM.image, BOOM.rect) 
       screen.blit(ammo_text, textpos1) 
       screen.blit(clip_text, textpos2) 
       screen.blit(nade_text, textpos3) 
       pygame.display.update() 
      grenadeNum = grenadeNum - 1 
      explosion_sound.play() 
      hide = False 
      clock.tick(4) 
      BOOM = Explosion([Grenade.rect.centerx, Grenade.rect.centery]) 
      screen.blit(BOOM.image, BOOM.rect) 
          hide = True 


if hide == False: 
    BOOM = Explosion([Grenade.rect.centerx, Grenade.rect.centery]) 
else: 
    BOOM = Explosion([-100, -100]) 

답변

0

:

이것은 내가 지금까지있는 것입니다. 대기중인 모든 작업이 일시 중단됩니다.

이 해결책은 입력에서 게임 논리를 분리하는 것입니다. 수류탄을 던지고 있기 때문에 수류탄을 던져서 나중에 수류탄 폭발을위한 카운터를 증가시켜야합니다. 충분한 시간이 지나면 수류탄 스프 라이트를 게임에서 제거하고 폭발로 교체 할 수 있습니다. 시계 개체를 이미 가지고있는 것을 볼 수 있습니다. 따라서 틱을 호출하고 충분하다고 생각할 때까지 누적하십시오. 수류탄이 폭발 할 시간을 결정할 수류탄 클래스의 시간 필드를 가질 수 있습니다.

모든 스프라이트를 목록에 유지하는 것이 유용하므로 모든 스프라이트를 list() 및 update() 메소드를 호출 할 수 있습니다.

약간 제안 : 간단한 파이 게임 모듈은 다음과 같아야합니다

createObjects() #initialization, loading resources etc. 
while(True): 
    delta = c.tick() #delta for the amount of miliseconds that passed since last loop 
    drawAll() #draws all active sprites 
    updateAll(delta) #moves, checks for collisions, etc 
    getInput() #changes the states of objects, calls functions like shoot,open etc. 

그래서 그려진 다른 스프라이트처럼 업데이트됩니다 새로운 스프라이트를 만들 것 수류탄을 던지고.