我正在使用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()
很可能您的tower类包含了对pygame.Surface实例的一些引用,根据the documentation for pickle,由于一些原因,该实例可能不会被pickle
不管是什么情况,都有一些变通办法。您可以将您的tower类转换为可pickle(如字典)或refer to pickle's documentation关于如何自定义tower类的pickle
希望这有帮助
相关问题 更多 >
编程相关推荐