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

Make the display 8 bit and set palette

我有一个 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 以利用所有新功能。