在 Flash CS5.5 中开发网页游戏时遇到了这个奇怪的错误
当游戏启动时,它会从 LSO 加载玩家历史信息。几个月来我一直在这样做,但出于某种原因,大约 10 天前,以下行和其他类似行开始导致 Chrome 和 Internet Explorer 出现异常。它们都与从 LSO 数据对象加载字典有关。有谁知道为什么这会突然开始引起问题,而以前它工作得很好?由于我的代码和编译设置长期以来一直相同,Chrome 或 Internet Explorer 中是否有可能发生了变化?
在启动期间,LSO 被加载
this.lso = SharedObject.getLocal("myLSO");
但随后发生此异常:
引发用户异常:TypeError:错误 #1034:类型强制失败:无法将 Object@1278ad19 转换为 flash.utils.Dictionary...
这是由这条线引起的:
this.game.playerHist.completionData=this.lso.data.playerHistory.completionData;
最终奏效的解决方案是像这样克隆字典:
this.game.playerHist.completionData =
this.clone(this.lso.data.playerHistory.completionData);
使用这个函数,它在处理原始对象时基本上做同样的事情(通过获取它的键),但由于某种原因不会引发异常:
function clone(original:Object):Dictionary {
var cloned:Dictionary= new Dictionary();
for(var key:Object in original) {
cloned[key]=original[key];
}
return cloned;
}
同样奇怪的是,有时在没有克隆功能的情况下加载字典时,它在 IE 中运行良好,只在 Chrome 中引发异常。有谁知道这两种浏览器之间可能有什么区别,或者有什么办法解释这一点?