显示然后隐藏在Pygam中

2024-04-27 14:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让爆炸出现然后消失。我的问题是,它要么会出现,要么就不会出现。在

到目前为止,我得到的是:

#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])

Tags: textrectimageifscreenpygamehideplayer
1条回答
网友
1楼 · 发布于 2024-04-27 14:39:34

您正在事件循环中blitting并等待。 在等待期间,任何操作都将被挂起。在

解决这个问题的办法是把游戏逻辑和输入分开。 因为你在投掷手榴弹,你应该只投掷手榴弹,然后增加一个手榴弹爆炸计数器。经过一段时间后,你可以从游戏中移除手榴弹精灵,并用爆炸代替它。我可以看到你已经有了一个时钟对象,所以只需调用tick,并将其累积到您认为足够为止。你可以在手榴弹类中有一个时间场来决定手榴弹何时爆炸。在

将所有精灵保存在一个列表中是很有用的,这样您就可以为所有精灵调用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.

所以扔手榴弹会创造一个新的精灵,它会像其他精灵一样被绘制和更新。在

相关问题 更多 >