我有两个针对词典的问题
第一: 我有一个问题,从Dictionary /加载数据到字典保存数据,我不知道为什么这不工作。我在这里做错了什么???import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.Dictionary;
import flash.net.SharedObject;
public class Main extends MovieClip
{
private var _box:Dictionary = new Dictionary ;
private var _change:Dictionary = new Dictionary ;
private var _loadingItems:Dictionary = new Dictionary ;
private var sData:SharedObject = SharedObject.getLocal("octopod_4");
public function Main()
{
if (sData.data.myStorage == undefined)
{
trace("1st time this game");
for (var i:int = 0; i < 5; i++)
{
var myImage_mc:MovieClip = new MovieClip();
_box[i] = myImage_mc;
if ( i > 1 )
{
_change[myImage_mc] = _box[i - 2];
}
}
sData.data.myStorage = _change;
sData.flush();
trace(sData.data.myStorage);
//we trace what we have in the Dictionary
for (var key:* in _change)
{
trace('_conditions[' + key.name + '] = ' + _change[key].name);
}
for (var key:* in _box)
{
trace('_box[' + key + '] = ' + _box[key].name);
}
}
else if ( sData.data.myStorage != undefined )
{
trace("loaded before");
_loadingItems = sData.data.myObject;
trace("_loadingitems " + _loadingItems)
}
}
}
第二个问题:如何从 sData.data.myObject; 中提取数据并将其输入到 的 _loadingItems 我的意思是因为错误它给了我错误#2004:其中一个参数无效。我无法看到来自 sData.data.myObject的数据; 被复制到 _loadingItems 。是吗??
答案 0 :(得分:1)
您将MovieClip放在字典中,除非您为它们实现DisplayObject
,否则任何扩展IExternalizable
都不能保存在共享对象中。这是因为任何显示对象都具有公共可用的阶段引用,这是动态的,即存储在stage
属性中的值是指向内存位置的指针。然后,当您尝试从共享对象加载对象时,默认情况下的行为是将所有属性设置为现在无效的存储值,因为Flash在每次加载影片时占用不同的内存地址集,并且你得到了2004. IExternalizable
实现覆盖了自定义代码的默认行为,但是在编写实现时必须遵守某些严格的限制。所以,如果你想在共享对象中存储一些东西,你应该设计一种方法来只存储一些有点静态的元数据(字符串,数字,数组很好,但嵌套对象通常不是,请注意一个对象作为成员数组也是一个嵌套对象,然后根据检索到的元数据创建一组动态对象(显示所有种类的对象)。