在外部文件中存储无法反序列化的pygame.Surface对象
我遇到了一个问题——我正在用Python和Pygame写一个游戏原型,想要保存我的游戏。所有和游戏相关的数据都在三个特定的类的实例里,我想把这三个实例保存到一个文件中。不过,我尝试用“序列化”(也就是把数据转成可以存储的格式)来保存这些实例,但没成功。相反,我收到了一个错误提示:“TypeError: can't pickle Surface objects”,意思是我不能保存Surface对象。
我愿意尝试其他的保存方法,使用其他类型的数据。最重要的是,我希望这些实例能够被保存,并且它们的数据可以在以后取出来。所以,我该怎么解决这个问题呢?请记住,我不是一个很有经验的程序员,去年在空闲时间学的Python,其他语言写得不多,虽然我正在慢慢学习C++。
2 个回答
5
简单来说,"序列化"就是把一个对象转换成可以保存或传输的格式。比如说,SDL表面是一个在内存中存储很多运行时状态的对象。试图直接把它序列化并不是个明智的选择。
你应该把游戏的状态和渲染部分分开,这样你就可以只序列化那些状态(无论是用序列化还是其他方法)。
这就像是试图保存一个视频的状态,结果却是想保存存放解码后视频的内存缓冲区。这是行不通的。正确的做法是序列化视频文件的位置和时间偏移。这样,下次你恢复应用时,就可以继续播放了。