Pygame精灵重叠不透明

时间:2013-08-06 22:25:56

标签: python pygame sprite transparent

所以我一直在用精灵和小组创造一个游戏。除了让我烦恼的一件事之外,一切都很顺利。一张图片说了千言万语: http://i.imgur.com/S3fsone.png

如您所见,背景图像显示在十字准线中,就像它应该的那样。然而,这艘船被长方形的白色边缘切断了。十字准线和船只都是精灵,其中使用的图像是透明的PNG图像。

我不知道如何删除它。目前我正在尝试十字准线,所以考虑到这一点,我将发布相关代码:

#Ship class
class Ship(pygame.sprite.Sprite):

    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.imageoriginal = pygame.image.load("ship.png")
        self.image = self.imageoriginal
        self.rect = self.image.get_rect()
        self.rect.center = position

#Crosshair class
class Pointer(pygame.sprite.Sprite):

    def __init__(self, image):
        super(Pointer, self).__init__()
        self.image = image.convert_alpha()
        self.rect = self.image.get_rect()

    def update(self):
        self.rect.center = pygame.mouse.get_pos()


def main():
    pygame.init()

    #Window and background
    window = pygame.display.set_mode((1000, 600), SRCALPHA)
    background = pygame.image.load("background.png")
    window.blit(background, (0, 0))

    #Ship and ship group
    ship = Ship((490, 500))
    theship = pygame.sprite.Group(ship)

    #Crosshair image and group
    crosshairimage = pygame.image.load("images\\crosshair.png")
    pointer = pygame.sprite.Group()

    #Game loop
    running = True
    while running:
        clock.tick(60)

        #Cut out from my event loop. Creates the crosshair that follows the mouse
        for e in pygame.event.get():
            elif e.key == K_4:
                pointer.add(Pointer(crosshairimage))

        #Update and redraw methods for both
        theship.clear(window, background)
        theship.update(window)
        theship.draw(window)
        pointer.clear(window, background)
        pointer.update()
        pointer.draw(window)
        pygame.display.flip()

那应该是它。十字准线完美地跟随鼠标,并且它的非红色部分在背景上是透明的。然而,它并不比其他精灵透明,这就是问题的关键。在其他精灵上移动的其他精灵也会导致这个问题。

我可以猜到精灵中的矩形导致了这种情况,但我不知道如何修复它。尝试使用面具,但我需要rects能够移动我的精灵不是吗?发现不等于" self.rect.center = position"掩码类中的方法。

非常感谢,如果有人能告诉我我能做些什么,很长一段时间以来一直很头疼。

1 个答案:

答案 0 :(得分:0)

我认为问题出在您的绘图部分。不要让每个组清楚并单独绘制,清除两个组,然后更新它们,然后绘制它们,而不是:

    #Update and redraw methods for both
    theship.clear(window, background)
    theship.update(window)
    theship.draw(window)
    pointer.clear(window, background)
    pointer.update()
    pointer.draw(window)
    pygame.display.flip()

有:

    #Update and redraw methods for both
    theship.clear(window, background)
    pointer.clear(window, background)
    theship.update(window)
    pointer.update()
    theship.draw(window)
    pointer.draw(window)
    pygame.display.flip()

我希望这会有所帮助。