Python 使用image transaprency使“显示黑色”;“事物”;

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

我很难用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})
然后我像这样把雪碧搅碎

    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)
我正在使用此瓷砖集:

tileset提供了一个json文件,可以用Tiled加载。我也尝试过这个,它非常有效,所以我想问题在我这边

谢谢你帮助我

Python 3.9.1 Pygame 2.0.1(SDL 2.0.14)

不转换曲面本身的格式,而是使用提供每像素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的图像格式的曲面副本

    但是,如果创建新曲面并使用
    convert_alpha()
    ,则alpha通道最初设置为最大值。像素的初始值是(0,0,0,255)。在绘制任何内容之前,需要使用透明颜色填充整个曲面:

    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?