Cómo guardar un grupo de sprites de pygame usando el módulo de archivado

Estoy haciendo un juego en el que quiero tener una función para guardar el juego. Tengo un grupo de sprites que quiero guardar usando el módulo de estante, pero me aparece el error “no puedo encoger los objetos de Surface” al intentar guardar mi grupo de sprites. Me preguntaba si hay alguna forma de usar el módulo de estante para guardar un grupo de sprites, y si no lo hay, ¿qué otro método de guardado debo usar?

Almaceno los valores relevantes de los sprites en un archivo json cuando el usuario quiere guardar el juego. Para cargar el juego, vacíe el grupo de sprites, reconstruya los sprites con los datos cargados y agréguelos al grupo. Por ejemplo, (haga clic en los sprites para arrastrarlos y presione “s” para guardar y “w” para cargar):

 import json import pygame as pg class Actor(pg.sprite.Sprite): def __init__(self, pos, color): super().__init__() self.color = color self.image = pg.Surface((32, 52)) self.image.fill(self.color) self.rect = self.image.get_rect(topleft=pos) class Game: def __init__(self): self.fps = 30 self.done = False self.bg_color = pg.Color('gray13') self.clock = pg.time.Clock() self.screen = pg.display.set_mode((640, 480)) actor1 = Actor((250, 120), pg.Color('steelblue1')) actor2 = Actor((400, 260), pg.Color('sienna1')) self.all_sprites = pg.sprite.Group(actor1, actor2) self.selected = None def run(self): while not self.done: self.handle_events() self.run_logic() self.draw() self.clock.tick(self.fps) def handle_events(self): for event in pg.event.get(): if event.type == pg.QUIT: self.done = True elif event.type == pg.MOUSEBUTTONDOWN: if self.selected: self.selected = None else: for sprite in self.all_sprites: if sprite.rect.collidepoint(event.pos): self.selected = sprite elif event.type == pg.MOUSEMOTION: if self.selected: self.selected.rect.x += event.rel[0] self.selected.rect.y += event.rel[1] elif event.type == pg.KEYDOWN: if event.key == pg.K_s: self.save() elif event.key == pg.K_w: self.load() def run_logic(self): self.all_sprites.update() def draw(self): self.screen.fill(self.bg_color) self.all_sprites.draw(self.screen) pg.display.flip() def save(self): with open('save_game.json', 'w') as file: print('Saving') data = [(sprite.rect.topleft, sprite.color[:4]) for sprite in self.all_sprites] json.dump(data, file) def load(self): with open('save_game.json', 'r') as file: print('Loading') data = json.load(file) self.selected = None self.all_sprites.empty() for pos, color in data: self.all_sprites.add(Actor(pos, color)) if __name__ == '__main__': pg.init() Game().run() pg.quit()