1

我试图让爆炸出现然后消失。我的问题是它要么出现,要么呆在那里,要么根本不出现。

这是我到目前为止所拥有的:

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

1 回答 1

0

您正在事件循环中进行传输和等待。等待期间任何操作都将暂停。

解决这个问题的方法是将游戏逻辑与输入分开。由于您正在投掷手榴弹,因此您应该只投掷手榴弹,然后为手榴弹爆炸增加一个计数器。在足够的时间过去后,您可以将手榴弹精灵从游戏中移除,并将其替换为爆炸。我可以看到你已经有一个时钟对象,所以只需调用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.

因此投掷手榴弹将创建一个新的精灵,该精灵将像任何其他精灵一样被绘制和更新。

于 2013-07-10T19:14:25.187 回答