如何解决使用图像透明度使看起来黑色的“东西”
我无法使用 Pygame 正确加载和 blit PNG 图像。 代码实际上是有效的,但它在我的精灵周围显示了一些奇怪的黑色“东西”:
要加载tileset,我这样做:
def TilesRessourceFile(self,filename=None,tileSize=None,tiles=None):
logging.info("Loading ressources from %s",filename)
self._tileSize = tileSize
res = pygame.image.load(filename)
res.convert_alpha()
for tile in tiles:
name,(x,y),alpha = tile.values()
surface = pygame.Surface((tileSize,tileSize))
surface.blit(res,(0,0),area=(x * tileSize,y * tileSize,(x + 1) * tileSize,(y + 1) * tileSize))
surface.convert_alpha() # set_colorkey(alpha)
self._tiles.update({name: surface})
然后我像这样 blit 精灵
def _implGameObjectRender(self,screen):
# logging.info("Render map %s",self._mapping)
for i in range(len(self._mapping)):
for j in range(len(self._mapping[i])):
screen.blit(self._mapping[i][j],(j * 128,i * 128))
可能不多,但我自己找不到解决方案。 我已经试过检查:
- 如何使用 pygame 加载 PNG
- pygame 的透明度(convert 和 convert_alpha)
我正在使用这个图块集:https://www.gamedevmarket.net/asset/2d-hand-painted-town-tileset-6626/
tileset 提供了一个 json 文件来加载 Tiled。也试过这个,它完美地工作,所以我想问题出在我这边
谢谢你帮助我!
Python 3.9.1 Pygame 2.0.1 (SDL 2.0.14)
解决方法
convert_alpha()
不会转换表面本身的格式,而是使用提供每像素 alpha 格式的格式创建新表面。
要么
surface = pygame.Surface((tileSize,tileSize))
surface = surface.convert_alpha()
或
surface = pygame.Surface((tileSize,tileSize)).convert_alpha()
有 3 种方法可以创建透明的表面:
-
设置透明色键
颜色键指定被视为透明的颜色。例如,如果您有一张应该是透明的黑色背景图像,请设置一个黑色键:
surface.set_colorkey((0,0))
-
您可以在创建新表面时启用其他功能。设置
SRCALPHA
标志以使用包含每像素 alpha 的图像格式创建表面。像素的初始值为(0,0):surface = pygame.Surface((tileSize,tileSize),pygame.SRCALPHA)
-
使用
convert_alpha()
创建表面的副本,其图像格式提供每像素 alpha。但是,如果您创建一个新表面并使用
convert_alpha()
,则 Alpha 通道最初设置为最大值。像素的初始值为 (0,255)。您需要先用透明颜色填充整个表面,然后才能在其上绘制任何内容:surface = pygame.Surface((tileSize,tileSize)) surface = surface.convert_alpha() surface.fill((0,0))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。