首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DisplayObject序列化

DisplayObject序列化
EN

Stack Overflow用户
提问于 2009-09-01 09:49:42
回答 2查看 2.1K关注 0票数 1

是否可以使用ByteArray序列化显示对象以存储和恢复它?Flash,ActionScript3,谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-01 14:08:58

您通常会实现IExternalizable ...然后,您可以简单地使用任何本机序列化方法对其进行序列化...

有些东西,你永远不能序列化,比如Shape/Sprite中的图形,等等。对于库对象,这可能是可以的,对于加载器,如果你子类化它们并覆盖一些方法,你也可以跟踪加载操作并在反序列化后恢复它们……只要你想序列化的东西是ISerializable,你就有很好的机会成功地完全存储和恢复状态(除了图形,正如我所说的)……

别忘了使用registerClassAlias,以确保您的类是保守的……

祝你好运... ;)

票数 2
EN

Stack Overflow用户

发布于 2009-09-01 11:47:36

下面是一个代码示例

代码语言:javascript
复制
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对象并负责将该对象放在舞台上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1361558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档