python - 我如何在pygame中删除我的精灵表上的黑色背景
问题描述
我正在尝试学习如何在 pygame 上使用精灵表,并且在我第一次尝试我的精灵时由于某种原因有黑色背景,我不知道如何解决这个问题,我已经在颜色键上放了 000 但是当我这样做,精灵都是马车
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 文档指出:
返回的 Surface 将包含与其来源文件相同的颜色格式、颜色键和 alpha 透明度。您经常需要
convert()
不带参数调用,以创建一个可以在屏幕上更快绘制的副本。
对于 alpha 透明度,就像在 .png 图像中一样,convert_alpha()
在加载后使用该方法,以便图像具有每个像素的透明度。
因此,如果您调用convert()
,则每个像素的 alpha 信息都会丢失,并且图像会被赋予不透明的背景。
当您blit
将图像放在新表面上时,目标表面必须提供每像素的 alpha 格式。SRCALPHA
使用标志创建一个每个像素都有一个 alpha 通道的表面:
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
推荐阅读
- jquery - 如果在 WooCommerce 结帐页面上选中复选框,则更改送货城市字段的值
- android - 如何使用android studio获取APK文件中对应库生成的.so文件信息
- android - Android 数据绑定使用原始的 MutableLiveData
- mysql - 根据目标数据库中的 where 条件将表数据从一个数据库复制到另一个数据库
- python-3.x - 如何将 excel/csv 文件作为函数参数传递?
- php - 按产品名称获取产品 ID(转义特殊字符)
- c# - 运行 Scaffold DBContext 而不覆盖实体框架核心中的自定义代码
- android - 如何解决 Kotlin 的膨胀类错误?
- javascript - 更新 mobx 存储值后,组件的 render() 没有被调用
- angular - 类构造函数 AnimationEngine 不能在没有 new 的情况下被调用