Actionscript 3 序列化Scene3D Papervision3D

Actionscript 3 序列化Scene3D Papervision3D,actionscript-3,serialization,flash-cs5,papervision3d,Actionscript 3,Serialization,Flash Cs5,Papervision3d,我正在尝试序列化整个场景,以便将其保存到文件中,稍后再加载。我知道Pv3D现在不是最好的3D引擎,但是我不想再次开始整个项目。当尝试加载实际文件,并将其数据分配给场景时,会出现问题,因为该场景会出现#1009错误(空对象) 代码如下: /* Papervision3D engine setup code here */ //... var scene:Scene3D = new Scene3D(); //... var file:FileReference; function LoadProy

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

代码如下:

/* Papervision3D engine setup code here */
//...
var scene:Scene3D = new Scene3D();
//...

var file:FileReference;
function LoadProyect(e:MouseEvent):void
{
    var fd:String = "3Dp Files (*.3dp)";
    var fe:String = "*.3dp";
    var ff:FileFilter = new FileFilter(fd,fe);
    file = new FileReference();
    file.browse(new Array(ff));
    file.addEventListener(Event.SELECT, onFileSelect);
    file.addEventListener(Event.COMPLETE, fileComplete);
}
function onFileSelect(e:Event):void
{
    file.load();
}
function fileComplete(e:Event):void
{
    var aScene:ByteArray = e.target.data;
    var objScene:Object = aScene.readObject();
    scene = objScene as Scene3D;
}
那么,Scene3D是否可以序列化?(我想是的,当在纯文本文件中序列化时,它们实际上会输出数据)这种方式可行吗?或者我应该单独保存每个对象并逐个加载,然后将其添加到场景中吗?

应该为您提供一个开始点,用于读取和写入对象

说到这里,核心功能在于和,两者都作为相关的API元素链接到

其文件说明了这一点:

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

您需要注册该类才能对其对象进行反序列化

问题是,默认情况下,只有类的
public
成员以这种方式反序列化。为了定义自定义反序列化/序列化,您必须实现以下接口:

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

当然,这需要做很多工作,因为Papervision3D没有实现该接口。您可以扩展相关类并实现接口,但很可能会遗漏一些东西。您必须了解类的所有内部工作方式。首先查看注册表ClassAlias()是否足够


如何序列化它?使用ByteArray类的writeObject方法。。。然后我将它保存到一个纯文本文件中。我尝试了registerClassAlias,但它似乎不起作用。我用错了吗?它应该是:registerClassAlias(“org.papervision3d.scenes.Scene3D”,Scene3D)。顺便说一句,谢谢…@FrancoMontanari请提供更多关于发生了什么的信息。你在哪里用那条线。“它似乎不起作用”的说法是毫无用处的。你到底在干什么。你在期待什么?你得到了什么结果?编辑您的问题并在此处添加信息。评论更多的是针对简短的通知和问题,而不是发布代码。