使显示为 8 位并设置调色板

问题描述

我有一个 8 位颜色深度的表面和一些 8 位颜色,我将表面设置如下:

self.surf = pygame.Surface((SCREEN_WIDTH,SCREEN_HEIGHT)).convert(8)
self.surf.set_palette(self.colours)

我尝试将显示器设为 8 位,这样我就不必在表面上进行 blit,因为我想知道是否可以直接在显示屏上设置像素。首先我试过:

screen = pygame.display.set_mode(size = (SCREEN_WIDTH,SCREEN_HEIGHT),depth = 8)

pygame.display.set_palette(self.colours)

但它说:

pygame.error: display mode is not colormapped

所以我尝试了:

self.surf = pygame.display.get_surface().convert(8)
self.surf.set_palette(self.colours)

和:

self.surf.set_at((i,index),the_colour)

但似乎没有任何效果。有没有办法像使用表面和 set_at 那样直接寻址显示

解决方法

这是 pygame 2 中的一个向后兼容性错误。https://github.com/pygame/pygame/issues/991

您可以通过降级到 pygame 1.9.6 来解决这个问题,但我建议您继续使用 pygame 2 以利用所有新功能。