2011-07-15 28 views
0

我想將一個Sprite對象保存爲我正在使用的設備上的一個文件,它似乎可行。我遇到的問題是將保存的文件讀回並放回到舞臺上作爲精靈。下面是我到目前爲止的代碼,有人能告訴我我做錯了什麼嗎?由於文件大小低於千字節,我懷疑保存的文件不是我所期望的。AS3和Flash Builder 4.5.1中的對象數據類型

public function save_album(e:Event):void 
{ 
    var outFile:File = File.documentsDirectory; // dest folder is desktop 
    outFile = outFile.resolvePath("canvas3.bin"); 

    var fs:FileStream = new FileStream(); 
    var bytes:ByteArray = new ByteArray(); 
    //trace (File.documentsDirectory.url + "/canvas2.bin"); 

    fs.open(outFile, FileMode.WRITE); 

    bytes.writeObject(graffitiContainer) //graffitiContainer is a Sprite 
    bytes.position = 0; 

    fs.writeBytes(bytes, 0, bytes.length); 
    fs.close(); 
} 

public function open_album(e:Event):void 
{ 
    var inBytes:ByteArray = new ByteArray(); 
    var inFile:File = File.documentsDirectory; 
    inFile = inFile.resolvePath("canvas3.bin"); // name of file to read 
    var inStream:FileStream = new FileStream(); 
    inStream.open(inFile, FileMode.READ); 
    inStream.readBytes(inBytes, 0, inBytes.length); 
    inStream.close(); 
    inBytes.position = 0; 

    ui.removeChild(graffitiContainer); 

    var obj:Sprite = inBytes.readObject() as Sprite; //returns a null 


    graffitiContainer = obj; 
    ui = new UIComponent(); 
    graffitiContainer.x = 0; 
    graffitiContainer.y = 100; 
    ui.addChild(graffitiContainer); 
} 

回答

0

不完全確定我明白你要完成什麼;然而,這個實現不會做你在想什麼 - writeObject只能序列化一般的公共屬性,而不是圖形成員。

您可以將其渲染爲位圖。

看到一篇博客文章這樣: http://jacwright.com/201/serializing-display-objects/

+0

感謝,我希望它實際的對象保存在本地存儲上的文件,所以當我在以後打開它,我可以編輯和進行更改,通過渲染它位圖數據我不會能夠編輯我有它的圖層。 – Tw1tCh

+0

您必須爲兒童遞歸編寫圖形數據的自定義序列以及一般的DisplayObject屬性。您是否爲這些對象編寫了編輯器,或者您打算如何編輯Flash Player運行時中的對象? –

+0

我已經編寫了代碼來處理我的Sprite容器中的所有子對象,繪製方法和形狀......我只需要找到一種方法,我可以將二進制或類似格式的精靈保存起來,因此當我檢索它時我可以保留結構。 – Tw1tCh