• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AS3 Flash 変数の扱い方について)

AS3 Flash 外部テキストのロードと変数の扱い方

このQ&Aのポイント
  • AS3 Flashで外部テキストをロードして変数に代入する方法について教えてください。
  • イベントハンドラで数値を取得し、別の変数に代入して保持させたいのですがうまく行きません。
  • 外部ASファイルのカスタムクラスのプロパティに代入しても値が保持されません。解決方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 > var urlLoader:URLLoader = new URLLoader(); > urlLoader.dataFormat = URLLoaderDataFormat.TEXT; > urlLoader.addEventListener(Event.COMPLETE, jsonReadHandler); > urlLoader.load(new URLRequest("json_data.json") ); > > が記述されています。 > なので、コンプリートしてから > イベントハンドラが呼び出されているはずなんですが、 > カスタムクラスのプロパティには保存されてませんでした。 だから..., #1で書いた意味が全くわかってらっしゃいませんね。。。 > カスタムクラスのプロパティには保存されてませんでした。 と書かれていますが それを確かめているタイミングが urlLoader に データのロードが完了する前なんですって! データのロードが完了する前に(まだデータを見ることができる状態になっていない段階で) > trace(ImageRoadClass.number); // 出力結果:0  保持できてない > trace(imageRoad.getNumber()); // 出力結果:0  保持できてない など確かめても データは入っていないのは当然でしょう? それだけのことを理解できれば 対処法はどうにでもなると思いますよ。 ということです。 (逆に言えばそれだけのことを理解しなければ何もできません。) 例えば すでに用意されている関数 function jsonReadHandler(e:Event):void{…} の中で 別関数(例:testFunc) を実行させるようにして その 別関数(例:testFunc) 内で カスタムクラスのプロパティに値が保存さてれいるかどうかを確かめてみれば良いのではないでしょうか?

with_nature
質問者

お礼

回答ありがとうございます。 確かにtestFuncで試してみると値が保存されていました! おっしゃる通り、asファイルのプロパティに値が保存される前に出力してたってことだったんですね。何か大きな勘違いをしていたみたいです。 ただなんで最後に書いた出力文が最初に実行されているのかが良くわかりませんが、これはまた違う内容の質問になってしまうので、また改めて質問したいと思います!もし都合があえばこの疑問にも答えてくれると助かります! ではありがとうございました。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

最後の trace(ImageRoadClass.number); // 出力結果:0  保持できてない trace(imageRoad.getNumber()); // 出力結果:0  保持できてない 「この2行のスクリプトが実行されたときに まだ外部データのロードが終わっていない。」 ただそれだけのことだと思いますよ。 つまり,時間差(実行タイミング)の問題です。 スクリプトには jsonReadHandler をロード完了時に実行させるように addEventListener する部分が抜けていますが 実際にはその部分が含まれているのでしょう? だからこそロード完了時に jsonReadHandler が実行されているのだと思います。 何のためにそのようなことを自分自身でしているのかを考えてみれば 答えはわかると思います。 方法など無数にあります。 とにかく当たり前のことですが データをロードしない限り データを見ることはできないのです。 また 読み込んでいないデータを変数に代入するなんてことも当然できないのです。 それだけのことです。

with_nature
質問者

補足

回答ありがとうございます。 説明不足で申し訳ないんですが、イベントハンドラの前に var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.TEXT; urlLoader.addEventListener(Event.COMPLETE, jsonReadHandler); urlLoader.load(new URLRequest("json_data.json") ); が記述されています。なので、コンプリートしてからイベントハンドラが呼び出されているはずなんですが、カスタムクラスのプロパティには保存されてませんでした。

関連するQ&A