2013-07-10 62 views
1

我試圖讓爆炸出現然後消失。我的問題是它會出現,並留在那裏,或根本不出現。然後顯示然後隱藏在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. 

所以投擲了一枚手榴彈將創建將繪製和更新,像任何其他精靈一個新的精靈。

相關問題