我有一个8位颜色深度的表面和一些8位颜色,我这样设置表面:
self.surf = pygame.Surface((SCREEN_WIDTH, SCREEN_HEIGHT)).convert(8)
self.surf.set_palette(self.colours)
我试着让显示器变成8位,这样我就不必闪电般地把表面打到它上,因为我想知道我是否可以直接设置显示屏上的像素。我第一次尝试:
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)
但似乎什么都不起作用。有没有一种方法可以直接处理显示,类似于使用surface和set_at?
这是pygame 2中的一个向后兼容性错误。https://github.com/pygame/pygame/issues/991.
你可以通过降级到pygame 1.9.6来解决这个问题,但我建议你留在pygame 2上,以利用所有新功能。