我在使用Pygame正确加载和blit PNG图像时遇到麻烦。代码实际上在工作,但是在我的精灵周围显示了一些奇怪的黑色“东西”:
要加载tileet,我要做的是:
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))
可能不多,但我自己找不到解决方案。我已经尝试检查:
我正在使用此tileet:https : //www.gamedevmarket.net/asset/2d-hand-painted-town-tileset-6626/
tileet提供了一个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()
创建透明Surface的方法有3种:
设置透明色键 set_colorkey()
颜色键指定被视为透明的颜色。例如,如果您的图像的黑色背景应该是透明的,请设置黑色键:
surface.set_colorkey((0, 0, 0))
创建新曲面时,可以启用其他功能。设置SRCALPHA
标志以创建具有包括每个像素alpha的图像格式的表面。像素的初始值为(0,0,0,0):
surface = pygame.Surface((tileSize, tileSize), pygame.SRCALPHA)
使用convert_alpha()
创建的副本表面与图像格式,每像素提供的α。
但是,如果创建一个新曲面并使用convert_alpha()
,则Alpha通道最初设置为最大。像素的初始值为(0,0,0,255)。您需要先用透明颜色填充整个表面,然后才能在其上绘制任何内容:
surface = pygame.Surface((tileSize, tileSize))
surface = surface.convert_alpha()
surface.fill((0, 0, 0, 0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句