我正在尝试学习如何在 pygame 上使用 sprite 表,并且在我第一次尝试我的 sprite 时出于某种原因有一个黑色背景,我不知道如何解决这个问题,我已经把 000 放在颜色上关键,但是当我这样做时,雪碧图都是 buggy
import pygame
class Spritesheet(pygame.sprite.Sprite):
def __init__(self, filename, *groups):
super().__init__(*groups)
self.filename = filename
self.spritesheet = pygame.image.load(filename).convert()
def get_sprite(self, x, y, w, h):
sprite = pygame.Surface((w, h))
sprite.set_colorkey(( 0 , 0 , 0))
sprite.blit(self.spritesheet, (0, 0), (x, y, w, h))
return sprite
pass
颜色键 0 0 0
任意数字的颜色键
最佳答案
不设置色键,去掉线:
sprite.set_colorkey(( 0 , 0 , 0))
但是使用convert_alpha()
而不是 convert()
self.spritesheet = pygame.image.load(filename).convert()
self.spritesheet = pygame.image.load(filename).convert_alpha()
pygame 文档指出:
The returned Surface will contain the same color format, colorkey and alpha transparency as the file it came from. You will often want to call
convert()
with no arguments, to create a copy that will draw more quickly on the screen.
For alpha transparency, like in .png images, use theconvert_alpha()
method after loading so that the image has per pixel transparency.
因此,如果您调用 convert()
,每个像素的 alpha 信息就会丢失,并且图像会被赋予不透明的背景。
当您在新表面上blit
图像时,目标表面必须提供每像素 alpha 格式。使用 SRCALPHA
标志创建一个每个像素都有一个 alpha channel 的表面:
sprite = pygame.Surface((w, h))
sprite = pygame.Surface((w, h), pygame.SRCALPHA)
Spritesheet
类:
class Spritesheet(pygame.sprite.Sprite):
def __init__(self, filename, *groups):
super().__init__(*groups)
self.filename = filename
self.spritesheet = pygame.image.load(filename).convert_alpha()
def get_sprite(self, x, y, w, h):
sprite = pygame.Surface((w, h), pygame.SRCALPHA)
sprite.blit(self.spritesheet, (0, 0), (x, y, w, h))
return sprite
另见:
关于python - 我如何在pygame中删除我的 Sprite 表上的黑色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66875816/