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

2024-10-08 18:28:14 发布

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

我和pygame一起工作,我必须在图像中淡出

我试过网上的指南,但都不管用

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

我有以下代码:

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)

Tags: 代码in图像alphafor指南rangescreen
2条回答
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的范围内

测量当前帧和最后一帧之间的时间,而不是执行i+=1。那将是你的三角洲。 现在,您只需将增量值乘以淡入度/秒值即可。在您的示例中,您似乎希望淡入度值为255/120,因此生成的线条为: i+=delta*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)

相关问题 更多 >

    热门问题