Flash CS5.5 で Web ゲームを開発しているときに、この奇妙なバグに遭遇しました。
ゲームが起動すると、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 では例外が発生するだけでした。2 つのブラウザの違いについて何か考えがある人はいますか、またはこれを説明する方法はありますか?