我四处搜索,但没有发现任何有用的东西。
我在 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()
谢谢
答案 0 :(得分:1)
Surface 的 mask 参数不被视为 pygame.Mask
对象。见pygame.Surface
:
[...] 掩码是一组 4 个整数,表示像素中的哪些位将代表每种颜色。法线表面不应需要 mask 参数。
使用 pygame.mask.Mask.to_surface
将 pygame.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