python - 我如何在pygame中删除我的 Sprite 表上的黑色背景

标签 python pygame sprite pygame-surface alpha-transparency

我正在尝试学习如何在 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 the convert_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/

相关文章:

python - 按住按钮时动画循环不起作用

python - 当我添加用作参数的组时,为什么会出现 nonetype 没有属性的属性错误

python-3.x - Pygame:display.update() 直到时钟延迟后才会更新

python - 在 Pygame 中每隔几秒移动一个对象

Python json 转储抛出错误 "is not JSON serializable""

python - Numpy 3d 数组按最外层索引转换为 2d 数组

cocos2d-iphone - Cocos2d 如何让一个 Sprite 跟随另一个 Sprite ?

sprite-kit - 将图像分配给 SKShapeNode 作为球 - Spritekit 游戏

python - 如何在虚拟环境中安装python包而无需再次下载?

python - 哪些数据类型有助于 python 中的计时器行为流