Как убрать черный фон из спрайта в листе спрайта в Pygame - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь удалить черный фон из этого спрайта, взятого из листа спрайта.Как вы увидите в следующем коде и предложенном в этом посте ( Прозрачная таблица спрайтов имеет черный фон ), я пытался использовать флаг pygame.SRCALPHA, но это, похоже, не работает.Я даже пытался использовать тот же лист спрайта после преобразования его с прозрачным фоном, и я получаю ту же черную рамку вокруг спрайта Mario.

import pygame

pygame.init()

def imgcolorkey(image, colorkey):
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0, 0))
        image.set_colorkey(colorkey, RLEACCEL)
    return image

class SpriteSheet(object):
    sprite_sheet = None
    def __init__(self, file_name):
        #self.sprite_sheet = pygame.image.load(file_name).convert()
        self.sprite_sheet = pygame.image.load(file_name,pygame.SRCALPHA)
    #self.sheet = load_image(filename)

    def imgat(self, rect, colorkey = None):
        rect = pygame.Rect(rect)
        #image = pygame.Surface(rect.size).convert()
        #image = pygame.Surface(rect.size, pygame.SRCALPHA ).convert()
        image = pygame.Surface(rect.size, pygame.SRCALPHA)
        #image.fill(transColor)
        image.blit(self.sprite_sheet, (0, 0), rect)
        return imgcolorkey(image, colorkey)

    def imgsat(self, rects, colorkey = None):
        imgs = []
        for rect in rects:
            imgs.append(self.imgat(rect, colorkey))
        return imgs

enter image description here

1 Ответ

0 голосов
/ 11 мая 2018

Нашел проблему.

Я не отправлял аргумент colorkey, равный -1, при создании изображения в моем основном классе.

Я изменил:

mario_image = SPRITE_SHEET.imgsat(MARIO_COORD)

до:

images = SPRITE_SHEET.imgsat(MARIO_COORD,-1)
...