在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字节,或以任何方式保存?显然,我想再次检索它,所有属性都完好无损。
答案 0 :(得分:1)
很长一段时间不能对DisplayObjects进行序列化,而是无声地失败。
您可以自己进行序列化,记录用户的操作,然后保存操作记录而不是结果。 (想到命令模式。)
或者,这个: http://www.bytearray.org/?p=4893
另外,看看这个问题: How to read data from shape/graphics object