Вы можете сделать это с помощью pygame.Surface.set_palette_at()
.В вашем случае у вас есть четыре цвета для шестидесяти четырех блоков, поэтому, чтобы перекрасить конкретный блок, вы можете использовать:
for n, newRGBA in enumerate(fourNewColours): # where fourNewColours are the RGBA tuples you want to plop into the palette.
GameSurface.set_palette_at(palette_offset + n, newRGBA) # where palette_offset is the number of the first palette index you want to replace (adding n to increment your way through the new colours).
Таким образом вы можете заменить отдельные блоки из четырех цветов.Задвинуть каждую палитру в игровую поверхность, чтобы начать с нее, может быть сложнее, поскольку pygame, кажется, приблизительно палитры blit'd изображений вместо прямой замены индексов целевой поверхности.Сложнее, потому что я не знаю, как бы вы перекрасили пиксели с дублирующимися значениями индекса RGBA.(Например, если Палитра 14/2 и Палитра 40/1, например, (90,91,200,255). Я не знаю, назначит ли Pygame все пиксели с этим значением RGBA для индекса палитры 57 (из Pal14 / 2) инет для idx 160 для Pal40 / 1, или если они останутся разными. Это может стать проблемой, если вы хотите перекрасить изображения на лету. Это должно работать надежно, если вы выберете немного более длинный маршрут и измените палитру игры какнеобходимо, а затем свернуть (или повторно свернуть) поверхности соответствующими новыми палитрами позже.
Надеюсь, что это полезно (даже если прошло более двух с половиной лет)!
Если вы хотитечтобы увидеть более длинную версию этого ответа, проверьте эту ссылку.