序列化有效但反序列化崩溃

Serializing works but unserializing crashes

我正在尝试在我的 HaxeFlixel 游戏中设置保存功能。

一些背景:所讨论的对象是 Player 的一个实例,它扩展了 FlxSprite。保存数据存储在我为其创建的自定义实例 class 中。该实例存储在 StringMap 中(键是保存名称),通过将其序列化为 FlxSave.

中的变量来保存

创建保存数据并写入它工作正常。但是,重新读取保存数据会使游戏崩溃并显示消息 "Invalid field: pixels"。 pixels 是来自 FlxSprite 的一个字段,但它不是序列化字符串中的第一个这样的字段,所以它可能不是那个。

如果有用,该字段的声明是y6:pixelsn - 即:

this line of code可以看出pixels实际上不是运行时的变量*。因此,反序列化程序在尝试将值分配给 pixels 时会崩溃。但是需要更多调查为什么序列化程序首先序列化 pixels 字段,因为它不应该在运行时真正存在。

注意*:pixels 的访问器是 (get, set),这使得 pixels 在运行时不是真正的 属性。阅读更多 here.

作为一般规则,我不建议直接序列化 FlxSprite(或其他复杂对象)。相反,您应该提取所需的信息(例如 x/y 位置或 hp 等)并仅序列化这些信息。