保存/加载MovieClip Air Android

时间:2015-01-11 16:21:36

标签: android actionscript-3 air

在AS3 AIR for Android Application我正在开发中,用户可以使用形状和图形属性构建一些绘图。用户必须能够将其绘图保存在File.applicationStorageDirectory中,然后再次加载其绘图,并且绘图的属性保持不变。 请查看以下代码:

这是代表抽屉的类:

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时,我可以毫无问题地保存/加载它,因为我将它的ByteArrays加载到加载器类中。

但是如何保存在运行时构建的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()方法,它会正常保存,但是当我尝试加载它时,会抛出异常:Unknow file format。

我该怎么做?如何提取bg字节,或以任何方式保存?显然,我想再次检索它,所有属性都完好无损。

1 个答案:

答案 0 :(得分:1)

很长一段时间不能对DisplayObjects进行序列化,而是无声地失败。

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

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

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