Save/Load MovieClip Air Android

Save/Load MovieClip Air Android

在我正在开发的 Android 应用程序的 AS3 AIR 中,用户可以使用形状和图形属性构建一些绘图。它必须能够让用户将其绘图保存在其 File.applicationStorageDirectory 中,然后再次加载其绘图,并且绘图属性完好无损。 看下面的代码:

这是代表抽屉的class:

public class Background extends Sprite {
    public var shape:Shape;
    public function Background(){
        this.shape = new Shape();
        shape.graphics.beginFill(0x000000);
        shape.graphics.drawRect(0, 0, 400, 400);
        shape.graphics.endFill();
        this.addChild(shape);
    }
}

外面,进入主线:public var bg:Background;

所以,当我从外部加载一些 swf 时,我可以 save/load 它没有任何问题,因为我将它的 ByteArrays 放入加载器 class.

但是如何保存在运行时构建的 DisplayObject? 像这样:

bg = new Background();

try{
            bytes = new ByteArray();
            file = File.applicationStorageDirectory.resolvePath("test/some.swf");
            fileStream = new FileStream();
            fileStream.open(file, FileMode.WRITE);
            fileStream.writeBytes(bytes) // -----HERE, I DO NOT HAVE bg bytes,
            fileStream.close();

        } catch (e:IOError){
            fileStream.close();
        }

我试过使用 writeObject() 方法,它可以正常保存,但是当我尝试加载它时,抛出异常:未知文件格式。

我该怎么做?我怎样才能提取 bg 字节,或以任何方式保存它?显然,我想再次取回它,而且它的所有属性都完好无损。

DisplayObjects 的序列化在很长一段时间内是不可能的,并且无提示地失败了。

您可以自己进行序列化,通过记录用户的操作,然后保存操作记录而不是结果。 (想到命令模式。)

或者,这样: http://www.bytearray.org/?p=4893

另外,看看这个问题: How to read data from shape/graphics object