単二電池

はじめまして
FLASHをつい1週間まえからはじめました超初心者です。
こちらの過去ログをみてやってみたのですが、うまくいかなかったので質問させてください。

外部テキスト(test.txt)をLoadVarsクラスで読み込み、
その中の定義(text=…)をMC(インスタンス名はtext)に書き出したいのですが、何度やっても書き出せません。
アクションスクリプトは
―――――――――――――――――
System.useCodepage = true;

myLoadVars = new LoadVars();

myLoadVars.onLoad = function(bSuccess) {
if (bSuccess) {
_root.text = this.text;
}
};

myLoadVars.load("test.txt");
――――――――――――――――
以上のようになっています。
わかる方いましたらよろしくお願いします。
質問初めてですので、今後のためにも言葉が足りなかったりしたら遠慮なく突っ込んでください。

A 回答 (1件)

ムービークリップ自体(_root でも ボタンでも)に変数を代入しても,何も表示されませんよ。


つまり,
「外部テキストが読み込めません」ではなくて,
読み込まれているのですが,表示はされません。
取りあえずテキストを表示するには,テキストを表示するためのテキストフィールドが必要です。
また,
「text」というすでに意味を持った言葉(文字列)を,
インスタンス名や変数名に付けるのは避けましょう(やめましょう)。


まず,
「test.txt」の中身のデータを次のようにしておきます。
---------------------------
myData=あいうえお
---------------------------


Flash の作成ですが,
新規ドキュメントを作成して,とりあえず任意の名前で「test.txt」と同じフォルダに保存します。
そのFlashのステージ上に,
ダイナミックテキストのテキストフィールドを用意し,
そのテキストフィールドにインスタンス名を付けます。
この説明では, 「myText」 というインスタンス名を付けたとしておきます。

そして,レイヤーを追加して,
「myText」 というインスタンス名のテキストフィールドが存在しない方のレイヤー,
つまり新しく追加した方のレイヤーのフレーム1の空白キーフレームに,
次のように書きます(コピペ可能)。

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

myLoadVars = new LoadVars();

myLoadVars.onLoad = function(bSuccess) {
if (bSuccess) {
// インスタンス名 myText のテキストフィールドに
// この LoadVars の変数 myData の値を代入
_root.myText.text = this.myData;
}
};

myLoadVars.load("test.txt");
----------------------------------------


ご質問で書かれているスクリプトの

  // インスタンス名 myText のテキストフィールドに
  // この LoadVars の変数 myData の値を代入
  _root.myText.text = this.myData;

ここを変えただけです。
他は全く同じです。



>> その中の定義(text=…)を
>> MC(インスタンス名はtext)に書き出したいのですが、

ということなので,MC の中に表示するのでしたら,
MC の中にテキストフィールドが必要になります。

上の状態で,
インスタンス名 「myText」 のテキストフィールドを選択し,
右クリック→シンボルに変換で,ムービークリップに変換し,
そのムービークリップにインスタンス名を付けます。
この説明では,「myMC」 というインスタンス名を付けたとしておきます。

この場合のフレーム1の空白キーフレームに書くスクリプトは次のようになります。
------------------------------------------------
System.useCodepage = true;

myLoadVars = new LoadVars();

myLoadVars.onLoad = function(bSuccess) {
if (bSuccess) {
// インスタンス名 myMC の MC 内の
// インスタンス名 myText のテキストフィールドに
// この LoadVars の変数 myData の値を代入
_root.myMC.myText.text = this.myData;
}
};

myLoadVars.load("test.txt");
------------------------------------------------


同じく,

  // インスタンス名 myMC の MC 内の
  // インスタンス名 myText のテキストフィールドに
  // この LoadVars の変数 myData の値を代入
  _root.myMC.myText.text = this.myData;

ここの部分が違うだけで,
結局,最初に書いたスクリプトのこの行,

 _root.myText.text
   ↓変更↓
 _root.myMC.myText.text

に,myMC が入っただけです。



--- 変数名&インスタンス名について ------

変数名やインスタンス名にすでにあるスクリプトなどを使うと紛らわしく,時には誤作動を起こす場合もあるので,使用しない方が良いです。
それで, my などを付けて,絶対に既存のスクリプトには存在しない名前にすることがよくあります。

ご質問で,
スクリプト中に myLoadVars というインスタンス名を使用しているのもそのためです。
LoadVars には,すでに LoadVars クラスという意味がありますから,インスタンス名 として使用するのは避けた方が良いです。
ですから,特に myLoadVars というインスタンス名にする必要はありません。
よく見かける hoge とかでも良いのです。

 hoge = new LoadVars();
 hoge.onLoad = function(bSuccess) {
  … 略 …
 hoge.load("test.txt");

しかし hoge だと何に対する名前かわかりにくく,
たくさん出てくるとhogeは何だったかさっぱりわからなくなるので,
myLoadVars にしてあるのです。

引数 bSuccess もほとんど同じ理由です。
Success 自体はスクリプトにはありません。
したがって,

 myLoadVars.onLoad = function(Success) {

としても,全く差し障りはありません。
しかし Success は英語として "成功" の意味を持ちます。
ですから,「Success がスクリプトである」と「見る人」が間違えてはいけないので,
bSuccess という全く意味の存在しない文字列にしてあるのだと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
早速やってみたところできました。
変数に意味のある単語は使わないようにしたほうがよかったんですね。

丁寧に教えていただきありがとうございました

お礼日時:2006/10/07 17:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報