ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:pdmwc776m Flashの外部テキスト読み込みについて
困り度:
  • すぐに回答を!
FlashのActionScriptに外部テキストから変数をに数値を格納したいのですが以下のようにしても出来ません。
教えてください。

System.useCodepage = true;
loadVariables ("maisu.txt",_root);
a = maisu;
gotoAndStop(a);
________________maisu.txt____________________
maisu=5

Flash8を使っています。よろしくお願いします。
質問投稿日時:08/05/02 06:41
質問番号:3991545
最新から表示回答順に表示

回答

 

回答者:BlurFiltan #1 の方も書かれていらっしゃいますが,
loadVariables() 関数は「外部テキストデータをロードせよ。」という命令文で,
それのみの実行しかしません。

データのロードには時間がかかります。
回線や場合や物によっては0.0001秒であったり,20分であったり様々です。

loadVariables はロードを実行するだけで,
実際のロードはかなり後になるということです。
これは loadVariables に限ったことではなく,
loadMovie関数もメソッドも,getURL関数もメソッドも,LoadVars.loadメソッドも,…
これらは全てそうです。
こういうものを使う場合は,

 ロードを実行
  →データのロードが完了すれば
   →そのデータで次の何かを実行

という流れをプログラミングしなければなりません。

ご質問のスクリプトを最小限で変更するなら次のようになります。

-------------------------------
System.useCodepage = true;
loadVariables("maisu.txt", _root);

// この階層にデータロード完了次第
_root.onData = function() {
a = Number(maisu);
gotoAndStop(a);
};
-------------------------------

※ただし,
  maisu.txt は後に改行なしで
  maisu=5
  である場合です。
  改行を入れる場合は,
  maisu=5&↓(改行)
  のように後に & を入れてください。


本当は(本当は と言うより 元来は(Flash 5では)),
onData は,MovieClip に直接書くことしかできない,
onClipEvent(data){ } イベントハンドラ が原型となったスクリプトです。
しかし Flash MX (Flash 6) 以降,
このイベントハンドラはフレームにイベントハンドラメソッドとして書けるようになりました。
それが
○○.onData = function() { … };
です。
_root にロードしていらっしゃるので ○○ は _root になります。
これを使うとムービークリップを作成する必要はなくなります。

ただ,このスクリプトはあまり使われません。
普通は見かけないと思います。
Flash 5 → Flash MX の過渡期に,
新しいクラスに慣れていない方などが使用されていたもので,
使用しないのが普通です。
といいますか,
loadVariables (Flash 4以降) 自体普通はあまり使いません(使うのは携帯用 FlashLite1.1 くらい)。

Flash MX 以降は,LoadVarsクラス の load メソッドを使って外部テキストをロードし,
LoadVars.onLoad や LoadVars.onData イベントハンドラメソッド を使って
ロード完了を待つのが一般的です。

その,一般的に普通見かけるスクリプトで書くと次のようになります。

------------------------------------
System.useCodepage = true;

// LoadVarsクラスのインスタンス myLV を作成
myLV = new LoadVars();

// myLV データロード完了時の動作を定義
myLV.onLoad = function(loadOK) {
// ロードに成功したら
if (loadOK) {
a = Number(myLV.maisu);
gotoAndStop(a);
}
};

// myLV に外部テキストをロード
myLV.load("maisu.txt");
------------------------------------
(ActionScript1.0 Flash MX 以降で使用可能)

LoadVarsクラスを使うと少々ややこしくはなりますが,
MovieClipLoaderクラス のようにリスナーオブジェクトを用意したり登録したりする必要はありませんから,
それを考えると楽だと思います。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/05/03 06:39
回答番号:No.2
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:15mm loadVariables()関数はファイルのロードが終わるまで待ってくれません。
つまり、loadVariables()が実行されると読み込みつつ次の処理を実行していきます。

ファイルを読み終わるまで待たないといけないので、
onClipEvent (data){}//_root以外のMCに読み込むとき
や、
setInterval()
などで読み込むまで待ってあげてください。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/05/02 17:04
回答番号:No.1
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示