Обработка данных игры в python, pygame - PullRequest
0 голосов
/ 31 марта 2020

Я делаю редактор уровней защиты башни, используя pygame, и мне нужно иметь возможность сохранить карту, созданную пользователем до сих пор, если пользователь нажимает кнопку «Сохранить». В настоящее время я просто пытаюсь реализовать «сохранение» на вышках, так как это все, что делает приложение. Итак, у меня есть список с именем towers, содержащий объекты башни из класса Tower(). Я попытался выбрать отдельные объекты башни, но это не сработало.

towers = [Tower(), Tower()]
def save_towers(self, towers):
     with open("game_data.picle", "wb") as tower_data:
          for tower in towers:
                pickle.dump(tower, tower_data)

 if user_pressed_save():
        save_towers()

Затем я попытался выбрать весь список, но это не сработало либо

with open("game_data.picle", "wb") as tower_data:
     pickle.dump(towers, tower_data)

Они оба выдают одну и ту же ошибку:

    pickle.dump(towers, tower_data)
TypeError: cannot pickle 'pygame.Surface' object

Но ни один из них не является пигмеем. Поверхность. Что я делаю неправильно? Кроме того, пожалуйста, дайте мне знать, если есть лучший способ сделать это, так как я впервые делаю настоящую программу.

Редактировать: Что-то, на что я чувствовал, стоит упомянуть: Следующий attriburte находится в классе башни, но я не понимаю, как это может вызвать ошибку self.tower = pygame.Surface((self.size)).convert()

1 Ответ

1 голос
/ 31 марта 2020

Скорее всего, ваш класс башни содержит некоторую ссылку на экземпляр pygame.Surface, который может не быть травлен по нескольким причинам в соответствии с документацией для pickle .

В любом случае, есть некоторые обходные пути. Вы можете преобразовать свой класс башни в нечто, что можно выбрать (например, словарь), или см. Документацию о том, как настроить травление вашего класса башни.

Надеюсь, это поможет!

...