python中的酸洗游戏数据,pygame

2024-09-25 04:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pygame制作一个塔防等级编辑器,如果用户按下“保存”按钮,我需要能够保存用户创建的地图。目前,我正在尝试在towers上实现“save”,因为这就是应用程序所做的一切。所以我有一个名为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

但是,它们都不是pygame.Surface。我做错了什么?另外,请让我知道是否有更好的方法来做这件事,因为这是我第一次做一个实际的程序

编辑: 我觉得值得一提的是: 以下属性在tower类中,但我不认为这会导致错误self.tower = pygame.Surface((self.size)).convert()


Tags: 用户selfgamedatasavewithopendump
1条回答
网友
1楼 · 发布于 2024-09-25 04:17:19

很可能您的tower类包含了对pygame.Surface实例的一些引用,根据the documentation for pickle,由于一些原因,该实例可能不会被pickle

不管是什么情况,都有一些变通办法。您可以将您的tower类转换为可pickle(如字典)或refer to pickle's documentation关于如何自定义tower类的pickle

希望这有帮助

相关问题 更多 >