然后在Pygame中显示Hide

时间:2013-07-10 17:35:53

标签: python 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])

1 个答案:

答案 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.

所以投掷手榴弹会创建一个新的精灵,它将像任何其他精灵一样被绘制和更新。