python-3.x - Pygame set_alpha 不适用于尝试的背景淡入淡出

标签 python-3.x pygame pygame-surface

我一直在尝试创建一个简短的代码,用于可以淡入和淡出黑色的项目,但由于某种原因,只有淡入功能在工作,而淡出功能或多或少被跳过。通过给他们参数,我确认问题出在第二个函数中,并且透明度根本没有改变。这是我的代码-

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/

相关文章:

python - Pygame 速度和碰撞问题

python - 在 ubuntu 16.04 上安装 opencv 后出现错误 no module opencv

python - QProgressBar不显示复制进度

python - 使用 re 在另一个字符串中查找一个字符串

python - 我如何限制pygame.draw.circle?

python-3.x - 如何将一个矩形传递给 pygame.display.update() 以更新窗口的特定区域?

Python/Pygame,标签未显示

python - 如何替换Python中的函数?

python - 检测鼠标悬停并在鼠标悬停时发出声音?

python - PyGame 在重新连接时重新初始化 USB MIDI 设备