我试图让爆炸出现然后消失。我的问题是它会出现,并留在那里,或根本不出现。
这是我到目前为止所做的:
#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 :(得分:0)
你正在blitting并在事件循环中等待。 等待时,任何行动都将被暂停。
解决方法是从输入中分离游戏逻辑。 既然你要扔手榴弹,你应该只扔手榴弹,然后再增加一个手榴弹爆炸的计数器。经过一段时间后,您可以从游戏中移除手榴弹精灵,并用爆炸替换它。我可以看到你已经有了一个时钟对象,所以只需要打勾,并累积它直到你认为它已经足够了。你可以在手榴弹类中设置一个时间字段来决定手榴弹爆炸的时间。
将所有精灵保留在列表中是有用的,因此您可以为所有精灵调用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.
所以投掷手榴弹会创建一个新的精灵,它将像任何其他精灵一样被绘制和更新。