pygame:创建具有透明度的遮罩形式 png

时间:2021-07-25 09:44:12

标签: python pygame png mask

我四处搜索,但没有发现任何有用的东西。

我在 pygame 中有一个 png 图像作为播放器,背景是透明的。我想创建一个只有播放器而不是背景的蒙版。我可以这样做,但我得到一个矩形作为遮罩,而不是玩家的形状。

我该如何解决这个问题?

这是我的代码:

import pygame
import os

pygame.init()

# Create display
screen_width=1600
screen_height=960

screen = pygame.display.set_mode((screen_width, screen_height),pygame.NOFRAME)

# Set framerate
clock = pygame.time.Clock()
fps = 60

#load images
player_img=pygame.image.load('img/player/Idle/1.png').convert_alpha()
player_mask=pygame.mask.from_surface(player_img)
player_maskSurf=pygame.Surface((player_img.get_width(),player_img.get_height()),masks=player_mask)

#define colors
BG=(124,64,204)
red = (255,0,0)
blue = (0,0,255)

run = True
while run:

    clock.tick(fps)
    screen.fill(BG)

    screen.blit(player_img, (800-player_img.get_width()/2,480-player_img.get_height()/2))
    screen.blit(player_maskSurf, (800-player_img.get_width()/2,480-player_img.get_height()/2))

    for event in pygame.event.get():
        #quit game
        if event.type == pygame.QUIT:
            run = False
        #keyboard presses
        if event.type==pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                run = False

    pygame.display.update()

pygame.quit()

谢谢

1 个答案:

答案 0 :(得分:1)

Surfacemask 参数不被视为 pygame.Mask 对象。见pygame.Surface

<块引用>

[...] 掩码是一组 4 个整数,表示像素中的哪些位将代表每种颜色。法线表面不应需要 mask 参数。


使用 pygame.mask.Mask.to_surfacepygame.Mask 转换为 pygame.Surface

player_maskSurf=pygame.Surface((player_img.get_width(),player_img.get_height()),masks=player_mask)

player_maskSurf = player_mask.to_surface()
player_maskSurf.set_colorkey((0, 0, 0)) # this is optional