序列化有效但反序列化崩溃
Serializing works but unserializing crashes
我正在尝试在我的 HaxeFlixel 游戏中设置保存功能。
一些背景:所讨论的对象是 Player
的一个实例,它扩展了 FlxSprite
。保存数据存储在我为其创建的自定义实例 class 中。该实例存储在 StringMap
中(键是保存名称),通过将其序列化为 FlxSave
.
中的变量来保存
创建保存数据并写入它工作正常。但是,重新读取保存数据会使游戏崩溃并显示消息 "Invalid field: pixels"。 pixels
是来自 FlxSprite 的一个字段,但它不是序列化字符串中的第一个这样的字段,所以它可能不是那个。
如果有用,该字段的声明是y6:pixelsn
- 即:
y
开始一个名为... 的字段
6:
长度为 6 的字符串...
pixels
(字符串)
n
空
从this line of code可以看出pixels
实际上不是运行时的变量*。因此,反序列化程序在尝试将值分配给 pixels
时会崩溃。但是需要更多调查为什么序列化程序首先序列化 pixels
字段,因为它不应该在运行时真正存在。
注意*:pixels
的访问器是 (get, set)
,这使得 pixels
在运行时不是真正的 属性。阅读更多 here.
作为一般规则,我不建议直接序列化 FlxSprite
(或其他复杂对象)。相反,您应该提取所需的信息(例如 x/y 位置或 hp 等)并仅序列化这些信息。
我正在尝试在我的 HaxeFlixel 游戏中设置保存功能。
一些背景:所讨论的对象是 Player
的一个实例,它扩展了 FlxSprite
。保存数据存储在我为其创建的自定义实例 class 中。该实例存储在 StringMap
中(键是保存名称),通过将其序列化为 FlxSave
.
创建保存数据并写入它工作正常。但是,重新读取保存数据会使游戏崩溃并显示消息 "Invalid field: pixels"。 pixels
是来自 FlxSprite 的一个字段,但它不是序列化字符串中的第一个这样的字段,所以它可能不是那个。
如果有用,该字段的声明是y6:pixelsn
- 即:
y
开始一个名为... 的字段
6:
长度为 6 的字符串...pixels
(字符串)n
空
从this line of code可以看出pixels
实际上不是运行时的变量*。因此,反序列化程序在尝试将值分配给 pixels
时会崩溃。但是需要更多调查为什么序列化程序首先序列化 pixels
字段,因为它不应该在运行时真正存在。
注意*:pixels
的访问器是 (get, set)
,这使得 pixels
在运行时不是真正的 属性。阅读更多 here.
作为一般规则,我不建议直接序列化 FlxSprite
(或其他复杂对象)。相反,您应该提取所需的信息(例如 x/y 位置或 hp 等)并仅序列化这些信息。