【问题标题】:Sprite shadow changing to full black精灵阴影变为全黑
【发布时间】:2022-11-26 19:32:34
【问题描述】:

player.png
shadow comparison

当我将播放器图像 blit 到一个表面然后将该表面加载到显示器与将整个图像加载到显示器上时,阴影是不同的

import pygame

pygame.init()
display = pygame.display.set_mode((1280, 736))
display.fill('#555358')
clock = pygame.time.Clock()


if __name__ == '__main__':
    image_1 = pygame.Surface((16, 16)).convert_alpha()
    image_1.blit(
        pygame.image.load('player.png').convert_alpha(),
        (0, 0),
        (16, 32, 16, 16))
    image = pygame.transform.scale(image_1, (16 * 3, 16 * 3))
    image.set_colorkey((0, 0, 0))
    display.blit(image, (0, 96))

    image_2 = pygame.image.load('player.png').convert_alpha()
    image_2 = pygame.transform.scale(image_2, (288 * 3, 240 * 3))
    display.blit(image_2, (0, 0))

    while True:
        # Process player inputs.
        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                pygame.quit()
                raise SystemExit

        pygame.display.flip()
        clock.tick(60)

我以为设置颜色键搞砸了,所以我尝试删除它无济于事

【问题讨论】:

    标签: python python-3.x pygame pygame-surface


    【解决方案1】:

    您必须创建一个带有 alpha 通道 (pygame.SRCALPHA) 的 Surface,而不是转换它并设置一个 set_colorkey

    image_1 = pygame.Surface((16, 16), pygame.SRCALPHA)
    image_1.blit(
            pygame.image.load('player.png').convert_alpha(),
            (0, 0),
            (16, 32, 16, 16))
    image = pygame.transform.scale(image_1, (16 * 3, 16 * 3))
    display.blit(image, (0, 96))
    

    注意,pygame.Surface((16, 16)) creates an entirly black surface. However, pygame.Surface((16, 16), pygame.SRCALPHA)creates a completely transparent surface.convert_alpha()` 改变了图像的格式,但保持纯黑色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多