如何使用pygame逐渐淡入图像?



我使用pygame,我必须在图像中淡入淡出。

我尝试过互联网上的指南,但没有一个有效。

我使用+=,但第一帧(fps 设置为 120,我使用 fps 1 识别(是完全透明的,第二帧很快完全不透明。我需要淡入淡出效果而不是这个。

我有这个代码:

i = 0
for i in range (0, 255):
i = 0
i += 1
dvd.set_alpha(i)
screen.blit(dvd, dvdrect)
pygame.display.update()

下面的行不起作用。

pygame.time.delay(30)

与其执行 i += 1,不如测量当前帧和最后一帧之间的时间。那将是你的三角洲。 现在,您只需将增量值乘以淡入淡出/秒值即可。在您的示例中,您似乎希望淡入淡出值为 255/120,因此生成的行将是: i += 增量 * 255/120

这里可能发生的另一个问题是 alpha 值可能是从 0.0 到 1.0 的浮点/双精度,因此在添加 1 后使其完全不透明。

在您的简单示例中,尝试添加 1/255 以查看是否获得预期结果。

编辑:我的大脑完全跳过了这样一个事实,是的,您一直在将 alpha 设置为 1。而不是做

for i in range(0,255):
dvd.set_alpha(i)

我建议做

for i in range(0,256):
dvd.set_alpha(i/256)
i = 0
for i in range (0, 255):
i = 0
i += 1
dvd.set_alpha(i)

这不是for循环的工作方式。您正在呼叫dvd.set_alpha(1)255 次。

也许你打算改用这个:

for i in range (0, 255):
dvd.set_alpha(i)

它调用dvd.set_alpha(0),然后调用dvd.set_alpha(1),然后调用dvd.set_alpha(2),...,然后调用dvd.set_alpha(254)

请注意,它调用dvd.set_alpha(255),因为range的上端是独占的。


我不知道set_alpha期望浮点数在 0 到 1 之间,还是 0 到 255(或者可能是 256?如果是前者,则需要在i从 0 变为大约 256 时调用类似dvd.set_alpha(i / 256)的内容,以将其缩放到 0 到 1 的范围。

最新更新