2013-07-05 43 views
0

我保存了一個位圖,我想在運行時加載它。加載保存的位圖

這裏是我的代碼:

var saveDataTxt:SharedObject = SharedObject.getLocal("File");

var textName:String; var textClass:Class;

textName = "Text0" + 1; textClass = getDefinitionByName(textName) as Class;
var tx:BitmapData = new textClass(); txtP[1] = new Bitmap(tx);

saveDataTxt.data.txtArray[1] = txtP[1];

addChild(saveDataTxt.data.txtArray[n]);

,但它給我一個錯誤:

**TypeError: Error #1034: Type Coercion failed: cannot convert [email protected] to flash.display.DisplayObject.** 

什麼解決辦法嗎?

+0

它似乎像saveDataTxt.data.txtArray [n]不是一個displayobject,但只是一個常規的對象。什麼存儲在sharedobject中? – Marijn

+0

我試圖在共享對象中保存位圖 –

+0

您的問題可能是您需要在重新加載之前註冊該類。請參閱我對此問題的回答:http://stackoverflow.com/questions/15667848/as3-for -ios-how-to-serialize-an-array-and-then-save-it/15668079#:15668079 – BadFeelingAboutThis

回答

1

要存儲在共享對象中的位圖,你需要首先序列化到一個字節數組(見Is it possible to store images in the SharedObject of Flash?

你可以做什麼,只是存儲您的自定義的BitmapData子類的共享對象(如果你不想打擾字節數組)

//you need to register every class/subclass in your shared object 
registerClassAlias("flash.display.BitmapData", BitmapData); 


var saveDataTxt:SharedObject = SharedObject.getLocal("File"); 

var textName:String; var textClass:Class; 

textName = "Text0" + 1; textClass = getDefinitionByName(textName) as Class; 
registerClassAlias(textName,textClass); //need to register the custom class 

var tx:BitmapData = new textClass(); txtP[1] = new Bitmap(tx); 

saveDataTxt.data.txtArray[1] = tx; //just store the bitmap data 

addChild(new Bitmap(saveDataTxt.data.txtArray[n] as BitmapData)); //you have to cast the object as bitmap data 
+0

非常感謝你,實際上我正在使用for循環。我將這些對象轉換爲位圖,但現在出現另一個錯誤:TypeError:Error#2007:參數子項必須爲非null。 \t at flash.display :: DisplayObjectContainer/addChild() –

+0

我使用跟蹤,它顯示我「對象對象」沒有鑄造和「空」與鑄造位圖。我想我必須將saveDataTxt.data.txtArray [1] = txtP [1]保存爲位圖。但是如何? –

+0

但你有沒有把flash.net.registerClasAlias調用呢? – BadFeelingAboutThis