序列化Scene3D Papervision3D

时间:2015-09-11 15:16:28

标签: actionscript-3 serialization flash-cs5 papervision3d

我试图序列化整个场景,以便将其保存到文件中,然后再加载。我知道Pv3D现在不是最好的3D引擎,但是我不想再次启动整个项目。尝试加载实际文件时会出现问题,并将其数据分配给出现#1009错误(空对象)的场景。

以下是代码:

private void getCurrentCount(object obj)
{
    if (sendPostToServer(this.serverUrlNPort, LinkCounter.postCount, out this.currentCount))
    {
        // do stuff with currentCount
    }
}

那么,Scene3D是否可序列化? (我猜他们是,他们实际上在纯文本文件中序列化时输出数据)并且这种方式可行吗?或者我应该将每个对象保存在自己的对象上并逐个加载,然后将其添加到场景中?

1 个答案:

答案 0 :(得分:0)

Chapter 2 of "What can you do with bytes?"应该为您提供阅读和编写ByteArray对象的起点。

说到这一点,核心功能在于writeObject()readObject(),它们都链接到registerClassAlias()作为相关的API元素。

它的文档不言自明:

  

当对象以Action Message Format(AMF)编码时,保留对象的类(类型)。将对象编码为AMF时,此函数会保存其类的别名,以便在解码对象时可以恢复该类。如果编码上下文没有为对象的类注册别名,该对象被编码为作为匿名对象。同样,如果解码上下文没有注册相同的别名,则会为解码数据创建一个匿名对象。

您需要注册该类才能反序列化它的对象。

问题在于,默认情况下,只有public个类的成员以这种方式去序列化。要定义自定义de / serialiszati​​on,您必须实现IExternalizable接口:

  

IExternalizable接口提供对类的序列化的控制,因为它被编码到数据流中。 IExternalizable接口的writeExternal()和readExternal()方法由类实现,以允许自定义数据流的内容和格式

当然,这需要很多工作,因为Papervision3D没有实现该接口。你可以扩展相关的类并实现界面,但你可能会错过一些东西。你必须知道这些课程的所有内部工作原理。首先查看registerClassAlias()是否足够。

Also check out this related question.