是否可以使用ByteArray序列化显示对象以存储和恢复它?Flash,ActionScript3,谢谢你的帮助。
发布于 2009-09-01 14:08:58
您通常会实现IExternalizable ...然后,您可以简单地使用任何本机序列化方法对其进行序列化...
有些东西,你永远不能序列化,比如Shape/Sprite中的图形,等等。对于库对象,这可能是可以的,对于加载器,如果你子类化它们并覆盖一些方法,你也可以跟踪加载操作并在反序列化后恢复它们……只要你想序列化的东西是ISerializable,你就有很好的机会成功地完全存储和恢复状态(除了图形,正如我所说的)……
别忘了使用registerClassAlias,以确保您的类是保守的……
祝你好运... ;)
发布于 2009-09-01 11:47:36
下面是一个代码示例
import flash.display.Sprite;
import flash.utils.ByteArray;
import flash.display.Graphics;
var savedData:SharedObject = SharedObject.getLocal("savedData");
var sprite:Sprite = new Sprite();
sprite.graphics.beginFill(0xFF0000, 0.5);
sprite.graphics.drawRect(0, 0, 40, 40);
this.addChild(sprite);
// first run
if (!savedData.data.spriteData) {
sprite.x = 100 + Math.random()*300
sprite.y = Math.random()*300
sprite.rotation = Math.random()*90;
sprite.scaleX = sprite.scaleY = 0.5 + Math.random();
savedData.data.spriteData = new ByteArray();
savedData.data.spriteData.writeObject(sprite);
}else {
var sd:Object = savedData.data.spriteData.readObject();
for (var s in sd) {
try {
sprite[s] = sd[s];
} catch (e:Error) {
trace("ERROR "+e);
}
}
}在第一次运行时,它会在舞台上随机放置一个精灵。然后,它将显示对象以AMF格式保存为SharedObject中的ByteArray。在第二次运行时,它会尝试将保存的ByteArray对象中的每个值指定给场景中的精灵。然而,这是有缺陷的,它只适用于不是引用的属性。对于其他复杂类型,它会抛出类型强制错误。
所以。您可以将数据存储为ByteArray,但之后必须正确实例化该对象。我将创建自己的DataStoringObject,用于仅保存实例化所需的属性,然后创建一个实例化方法,该方法将读取byte Array对象并负责将该对象放在舞台上。
https://stackoverflow.com/questions/1361558
复制相似问题