2012-06-25 35 views
0

我想要做的事:AS3系列化

在工具欄,拖動 - 具備對象和dropable到一個影片剪輯(他們則成爲影片剪輯的孩子)。一旦完成,我希望能夠序列化這個對象,所以我可以將它保存到一個文件中。然後,我可以重新加載這個文件,並繼續拖/放這個動畫片段的東西。

我如何做:

public class Serialization { 
    public static function serializeToString(value:Object):String{ 
     if(value==null){ 
      trace("null isn't a legal serialization candidate"); 
     } 
     var bytes:ByteArray = new ByteArray(); 
     bytes.writeObject(value); 
     bytes.position = 0; 
     var be:Base64Encoder = new Base64Encoder(); 
     be.encode(bytes.readUTFBytes(bytes.length)); 
     return be.drain(); 
    } 

    public static function readObjectFromStringBytes(value:String):Object{ 
     var dec:Base64Decoder=new Base64Decoder(); 
     dec.decode(value); 
     var result:ByteArray=dec.drain(); 
     result.position=0; 
     return result.readObject(); 
    }  
} 

這是調用函數/其寫入文件:

 var fr:FileReference = new FileReference; 
     fr.addEventListener(Event.COMPLETE, success); 
     var txtString:String = new String(); 
     txtString = save.Serialization.serializeToString(pagePic); 
     trace(txtString); 
     fr.save(txtString, "test.txt"); 

不幸的是,txtString顯示爲空白。我接近這個錯誤嗎?

附註: 這是爲移動平臺而開發的。

+0

我有點困惑。 drain()不是Base63Encoder類中記載的方法:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/utils/Base64Encoder.html – JeffryHouser

+0

我在印象之外簡單地引用了drain將編碼的字節更改爲字符串。 – nameistaken1

+0

爲什麼你不使用AMF序列化和序列化對象本身? bytes.writeObject(值); – turbosqel

回答

1

不幸的是,動畫片段,聲音和其他資源無法序列化。我的解決方案是創建一個自定義類,它將存儲我的所有屬性並在加載時重新分配它們,或者在保存/加載時寫入/解析文本文件。