我一直在尝试创建一个简短的代码,用于可以淡入和淡出黑色的项目,但由于某种原因,只有淡入功能在工作,而淡出功能或多或少被跳过。通过给他们参数,我确认问题出在第二个函数中,并且透明度根本没有改变。这是我的代码-
import pygame
screen = pygame.display.set_mode((800,600))
image = pygame.image.load_extended('Map.png').convert_alpha()
image = pygame.transform.scale(image,(530,300))
image.set_alpha(0)
x = 0
y = 255
def fade_in(x):
while True:
screen.blit(image,(0,0))
pygame.display.update()
image.set_alpha(x)
pygame.time.delay(100)
if x < 255:
x += 5
else:
pygame.time.delay(500)
x = 0
fade_out(y)
def fade_out(y):
while True:
screen.blit(image,(0,0))
pygame.display.update()
image.set_alpha(y)
pygame.time.delay(100)
if y > 0:
y -= 5
else:
pygame.time.delay(500)
y = 255
fade_in(x)
while True:
fade_in(x)
有人知道问题出在哪里吗?
最佳答案
当您在屏幕上绘制透明表面时,该表面会与屏幕的当前内容混合。因此,您需要先清除屏幕,然后再使用 screen.fill(0)
绘制淡入淡出背景。
不要尝试以递归方式或在应用程序循环内使用循环来控制应用程序。不要延迟
比赛。 延迟
导致游戏停止响应。
使用应用程序循环并使用pygame.time.Clock
控制每秒帧数,从而控制游戏速度。
方法tick()
的pygame.time.Clock
对象,以这种方式延迟游戏,即循环的每次迭代都消耗相同的时间段。请参阅pygame.time.Clock.tick()
:
This method should be called once per frame.
这意味着循环:
clock = pygame.time.Clock() run = True while run: clock.tick(60)
示例:
import pygame
pygame.init()
screen = pygame.display.set_mode((400,300))
clock = pygame.time.Clock()
try:
image = pygame.image.load_extended('Map.png').convert_alpha()
image = pygame.transform.scale(image,(530,300))
except:
image = pygame.Surface(screen.get_size())
pygame.draw.circle(image, (255, 0, 0), screen.get_rect().center, min(*screen.get_size()) // 2 - 20)
alpha = 0
alpha_change = 1
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
alpha += alpha_change
if not 0 <= alpha <= 255:
alpha_change *= -1
alpha = max(0, min(alpha, 255))
screen.fill(0)
alpha_image = image.copy()
alpha_image.set_alpha(alpha)
screen.blit(alpha_image, (0, 0))
pygame.display.flip()
pygame.quit()
exit()
关于python-3.x - Pygame set_alpha 不适用于尝试的背景淡入淡出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66391461/