0

我开发了一个游戏,并在屏幕上显示如下文本:

message = font.render( "Hello World" , True)
surface_1.blit(message, some_rect)

所以屏幕上现在出现了一条消息“Hello World”。我需要的是一种将这条消息保持几秒钟然后隐藏它的方法。我认为一个简单的方法是创建一个变量来计算循环的每一轮,当计数器达到多轮时(这将等于时间,100 轮 = 1 秒),然后通过改变来隐藏消息消息为空字符串,例如:""

我尝试了这种方法并且有效,但我需要一些不同的东西,首先是一种从表面上真正删除消息的方法,以及一种更好的方法来为消息保留时间但是这种更好的方法我不想停止我的其他事情将在游戏中添加(稍后)。

例如,一个精灵将使用图片的各种不同状态进行动画处理,以制作动画(人行走)。所以睡眠/暂停游戏几秒钟不是一个好主意。

4

1 回答 1

0

没有办法从表面上删除某些东西。因为表面没有关于被咬到上面的物体的信息。

这大概是一个 pygame 结构应该是这样的:

init()
while playing:
    drawVisibleSprites()
    updateGame()
    getPlayerInput()

假设您要显示字符串“Hello World”5 秒钟。

我要做的是创建一个 VolatileSprite 类,它将有一个 Sprite 和一个计时器对象。然后循环查看时间是否已经过去,如果,我安排删除对象。

由于我们需要一种方法来知道已经过去了多少时间,我们可以使用 pygame.time.Clock()。这个类有一个方法tick(),它返回最后一次调用后的毫秒数tick()。这个所谓的时间增量可以传递给各种函数来更新精灵。

回到我们的 VolatileSprite。在update(delta)VolatileSprite 的方法中,您可以检查时间是否已经过去,如果是,则可以将其设置为已删除。这样,在您的主代码中,您可以遍历所有精灵并删除应该删除的精灵。

动画也是同样的原理,AnimatedSprite 会有一个计时器,当经过一定的毫秒数时,它会改变要绘制的图片。

于 2014-01-11T11:10:23.000 回答