我尝试在 Pygame 中显示图像,但我想更改它的不透明度。 该游戏是一款卡片记忆游戏,对于主页背景,我希望是一个包含一些卡片的暗屏,具有不同的位置、大小、旋转角度和不透明度。 图像是一张带有问号的简单卡片,这意味着另一面的图像是一个谜。 图像实际图像为 35x70。
每次我想改变不透明度时我都做不到。
我尝试了更多方法:
import pygame
from PIL import Image as Img
pygame.init()
class Image:
def __init__(self,image_path : str, size : tuple, rotation_angle : int, position : list, screen : object, opacity = 255) -> None:
self.size = size
self.rotation_angle = rotation_angle
self.position = position
self.screen = screen
self.opacity = opacity
# initiate image & its properties
# Initiate the image and convert it.
self.image = pygame.image.load(image_path).convert_alpha()
self.get_position()
#if self.rotation_angle:
#self.image = pygame.transform.rotate(self.image,self.rotation_angle)
""" Set the position. The position could be a string or int. If the pos[0] or pos[1] is a
string, the only possible it that the horizontal/vertical pos is in the center otherwise
it should be an integer with the position """
def get_position(self) -> None:
if self.position[0] == "center":
self.position[0] = self.screen.get_size()[0] // 2 - self.image.get_size()[0] // 2
if self.position[0] != "center":
self.position[0] = int(self.position[0])
if self.position[1] == "center":
self.position[1] = self.screen.get_size()[1] // 2 - self.image.get_size()[1] // 2
if self.position[1] != "center":
self.position[1] = int(self.position[1])
def display_image(self) -> None:
self.image.set_alpha(self.opacity)
self.screen.blit(self.image,self.position)
每次我尝试这种方式时,都会显示一些奇怪的东西。图像不透明度的一半似乎适用,但另一侧不透明度仍然保持 255。
我也尝试过使用PIL,生成的图像很好,不透明度适用于整个图像,但是当我尝试显示它时,不透明度仍然是255。
您可以使用set_alpha命令。链接在这里 https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha.
请记住该值是从 0 到 255。(255 是完全不透明,0 是透明)
self.image.set_alpha(opacity)