我试图序列化整个场景,以便将其保存到文件中,然后再加载。我知道Pv3D现在不是最好的3D引擎,但是我不想再次启动整个项目。尝试加载实际文件时会出现问题,并将其数据分配给出现#1009错误(空对象)的场景。
以下是代码:
private void getCurrentCount(object obj)
{
if (sendPostToServer(this.serverUrlNPort, LinkCounter.postCount, out this.currentCount))
{
// do stuff with currentCount
}
}
那么,Scene3D是否可序列化? (我猜他们是,他们实际上在纯文本文件中序列化时输出数据)并且这种方式可行吗?或者我应该将每个对象保存在自己的对象上并逐个加载,然后将其添加到场景中?
答案 0 :(得分:0)
Chapter 2 of "What can you do with bytes?"应该为您提供阅读和编写ByteArray
对象的起点。
说到这一点,核心功能在于writeObject()
和readObject()
,它们都链接到registerClassAlias()
作为相关的API元素。
它的文档不言自明:
当对象以Action Message Format(AMF)编码时,保留对象的类(类型)。将对象编码为AMF时,此函数会保存其类的别名,以便在解码对象时可以恢复该类。如果编码上下文没有为对象的类注册别名,该对象被编码为作为匿名对象。同样,如果解码上下文没有注册相同的别名,则会为解码数据创建一个匿名对象。
您需要注册该类才能反序列化它的对象。
问题在于,默认情况下,只有public
个类的成员以这种方式去序列化。要定义自定义de / serialiszation,您必须实现IExternalizable
接口:
IExternalizable接口提供对类的序列化的控制,因为它被编码到数据流中。 IExternalizable接口的writeExternal()和readExternal()方法由类实现,以允许自定义数据流的内容和格式
当然,这需要很多工作,因为Papervision3D没有实现该接口。你可以扩展相关的类并实现界面,但你可能会错过一些东西。你必须知道这些课程的所有内部工作原理。首先查看registerClassAlias()
是否足够。