2013-07-05 49 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