我使用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 的范围。