储存unpicklabe游戏。表面外部文件中的对象

2024-05-29 11:34:33 发布

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

所以我遇到了一个问题——我正在用Pygame用Python编写一个游戏原型,我想保存我的游戏。所有与游戏相关的数据都在特定类的三个实例中,我想将这三个实例保存到一个文件中。但是,我尝试过对这些实例进行酸洗,但它不起作用。相反,我得到的是“TypeError:cannotpickle Surface objects”。这是个问题,因为我想存储曲面对象。在

我愿意使用任何其他类型的数据类型来代替酸洗。重要的是这些实例被存储起来,然后它们的数据可以在以后检索到。那么我能做些什么来克服这个问题呢?请记住,我不是一个非常有经验的程序员,在一年前我在业余时间学会了Python,而且我不能写很多其他语言,虽然我正在慢慢地学习C++。在


Tags: 文件数据对象实例游戏类型objects经验
2条回答

pickling的基本点是您应该能够以某种方式序列化对象。SDL曲面是一个内存中的对象,它保存了大量的运行时状态。试图把它连载是不完全明智的。在

你应该做的是将游戏的状态与渲染组件分离,这样你就可以序列化这些组件(酸洗或其他)。在

这就像试图通过某种方式保存保存解码视频的内存缓冲区来保存视频的状态。这行不通。相反,保存它的方式是序列化视频文件的位置和时间偏移量。然后,您可以在下次恢复应用程序时继续播放。在

读取http://docs.python.org/library/pickle.html#pickle-protocol,您需要让Surface objects导出一个reduce方法,或者使用copy\ureg模块告诉pickle如何处理http://docs.python.org/library/copy_reg.html#module-copy_reg中记录的数据。在

不管怎样,pickle需要的是一个函数,它可以将无法处理的blob转换为(some_class, [arguments here])。然后当你取消拾取时,它会用这些参数构造一个新的类。在

相关问题 更多 >

    热门问题