Python 使用image transaprency使“显示黑色”;“事物”;
我很难用Pygame正确加载和blit PNG图像。 代码实际上正在工作,但它在我的精灵周围显示了一些奇怪的黑色“东西”: 要加载tileset,我需要执行以下操作:Python 使用image transaprency使“显示黑色”;“事物”;,python,python-3.x,pygame,png,transparency,Python,Python 3.x,Pygame,Png,Transparency,我很难用Pygame正确加载和blit PNG图像。 代码实际上正在工作,但它在我的精灵周围显示了一些奇怪的黑色“东西”: 要加载tileset,我需要执行以下操作: def TilesRessourceFile(self, filename=None, tileSize=None, tiles=None): logging.info("Loading ressources from %s", filename) self._tile
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})
然后我像这样把雪碧搅碎
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透明度(转换和转换_alpha)
surface=pygame.surface((tileSize,tileSize))
surface=surface.convert_alpha()
或
surface=pygame.surface((tileSize,tileSize)).convert_alpha()
有3种方法可以创建透明曲面:
- 将透明颜色关键点设置为
颜色键指定被视为透明的颜色。例如,如果有一个黑色背景的图像应该是透明的,请设置黑色颜色键:
surface.set_colorkey((0,0,0))
- 创建新曲面时,可以启用其他功能。设置该标志以创建包含每像素alpha的图像格式的曲面。像素的初始值为(0,0,0,0):
surface=pygame.surface((tileSize,tileSize),pygame.SRCALPHA)
- 用于创建具有提供每像素alpha的图像格式的曲面副本
但是,如果创建新曲面并使用
,则alpha通道最初设置为最大值。像素的初始值是(0,0,0,255)。在绘制任何内容之前,需要使用透明颜色填充整个曲面:convert_alpha()
surface=pygame.surface((tileSize,tileSize)) surface=surface.convert_alpha() 表面填充((0,0,0,0))
surface=pygame.surface((tileSize,tileSize)).convert_alpha()
。结果也一样。编辑:我取消了表面的注释。设置颜色键(alpha)否则我会得到黑色的精灵background@FebvreAntoine那么你还没有读完整的答案?表面填充((0,0,0,0))怎么样?或者干脆surface=pygame.surface((tileSize,tileSize),pygame.SRCALPHA)
?Sry,没有看到您更新的答案,将检查此项确定我知道了,非常感谢;)我对你的答案投了赞成票,告诉我我需要超过15点的声誉才能展示出来。。。编辑:它确切地说感谢您的反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。编辑2:如何将此帖子标记为resolvde?