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