2013-07-10 7 views
1

Я пытаюсь сделать взрыв, а затем исчезнуть. Моя проблема заключается в том, что он появится или останется там, или вообще не появится.Show then Hide in Pygame

Это то, что я до сих пор:

#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

Вы блиттинг и ждут внутри цикла событий. Любые действия будут приостановлены во время ожидания.

Решение этого вопроса - отделить логику игры от ввода. Поскольку вы бросаете гранату, вы должны бросать гранату, а затем увеличивать счетчик на взрыв гранаты. По прошествии достаточного времени вы можете удалить гранатовый спрайт из игры и заменить его взрывом. Я вижу, что у вас уже есть объект часов, поэтому просто звоните по тику и накапливайте его, пока не подумайте, что этого достаточно. У вас может быть поле времени в классе гранаты, которое решит, когда граната взорвется.

Полезно хранить все спрайты в списке, поэтому вы можете вызвать методы draw() и update() для всех них.

Немного предложения: Простой модуль Pygame должен выглядеть следующим образом:

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. 

Так бросать гранату бы создать новый спрайт, который будет нарисован и обновленным, как и любым другим спрайт.