メイン 迷える子羊の部屋【初心者専用】 loadVarsで読み込まれた変数の階層 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
colon | Åê¹ÆNo.17258 投稿日時: 2005-5-16 15:06 |
新米 居住地: 世田谷区 投稿: 21
使用環境:
Mac OS X Flash MX Professional 2004 Safari,IE |
loadVarsで読み込まれた変数の階層 こんにちは。
既にかなり語られていらっしゃるネタだと承知しておりますが、過去ログをみても解決できなかったので、恐縮ですがあらためて質問させて頂きます。 やろうとしていることは、カタログのようにサムネール画像とテキストデータを対にしたものを並べたいのですが、そのデータを外部ファイルで用意して読み込みたいのです。 _root上に複製元のサムネールとテキストを一つにしたMC(unit)を配置してこれを数分duplicateMovieClipで複製しようと考えております。 MC(unit)の1フレームには以下のスクリプトが記されております。 theLoadVars = new LoadVars(); theLoadVars.load("test.txt"); theLoadVars.onLoad = function(theSource) { trace(this.dnum_1) }; fileNum = 6; leftX = t1._x; margin = 10; twidth = t1._width; theight = t1._height; //サムネイルを複製 for (i=1; i<fileNum; i++) { newName = "t"+(i+1); targetM = "t"+i; duplicateMovieClip(eval(targetM), newName, i+1); this[newName].name="this.dnum_"+i if (this[newName]._x>=twidth*3+margin*2+leftX) { this[newName]._x = leftX; this[newName]._y += theight+margin; } else { this[newName]._x += twidth+margin; } } 外部テキストデータ(test.txt)はdnum_1=test1&dnum_2 .... dnum_6=test6としております。 MC(unit)に配置されたMC(t1)には画像を読み込むためのMC(base)と、テキストを読み込むダイナミックテキストエリア(pname)が配置されており、1フレーム目に以下のスクリプトを設定しております。 base.loadMovie("shopdata/img/th/book/"+_name+".jpg"); この様な設定で成功していることはサムネールの複製と画像の読み込みです。 上手くいかないことが、loadVarsで読み込んだdnum_○=○○が読み込めません。 loadVarsの箇所で t1=dnum_1としたら1つ目のサムネールのテキストには読み込まれました。 またサムネールのMC(t1)のフレームに pname = _parent.theLoadVars.dnum_+i; としてみたのですが、結果はundefinedでした。 あらためてお聞きしたいのは新たに生成したloadVarsインスタンス(この場合では「theLoadVars」)はどの階層に存在し、他のMCから参照する場合ではどのような階層指定となるのでしょうか?今回の場合ですと、theLoadVarsというインスタンスはMC(unit)にあり、MC(unit)の下のMC(t1)からtheLoadVarsに読み込まれた変数「dnum_1」への参照は_parent.theLoadVars.dnum_1ではないのでしょうか? それとも他の部分で誤りがあるのでしょうか。 長々と恐れ入りますが、よろしくお願いいたします。 環境は :FlashMX2004,mac osxです |
tomoakira | Åê¹ÆNo.17261 投稿日時: 2005-5-16 17:36 |
新米 居住地: 千葉 投稿: 9
使用環境:
Win2000, |
Re: loadVarsで読み込まれた変数の階層 こんにちは。
LoadVarsで読み込まれた変数の階層という事ですが、LoadVarsも他のターゲット指定と同じで theLoadVars = new LoadVars(); theLoadVars.load("test.txt"); の場合は theLoadVars.変数名 となります。 読み込んだ変数が認識されない場合、読み込みが完了されてないうちに呼び出しているか、表記のミスだと思います。 引用:
この部分では、まだ読み込みが完了してないので MC(unit)の1フレーム目に書かれている 引用:
のonLoadにテキスト読み込みを書いてあげれば表示されると思います。
|
野中文雄 | Åê¹ÆNo.17262 投稿日時: 2005-5-16 18:01 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: loadVarsで読み込まれた変数の階層 まず、問題を絞込むべきでしょう。回答者にわかりにくいだけでなく、ご自分でも問題のポイントが把握できない原因になります。
引用: colonさんは書きました: ひとつを除いて動作するというのなら別として、すべて正しい処理がなされないのなら、まずひとつを成功させるのが先決です。 引用: MC(unit)の1フレームには以下のスクリプトが記されております。
引用: 外部テキストデータ(test.txt)はdnum_1=test1&dnum_2 .... dnum_6=test6としております。 TextFieldインスタンスに設定したと思われる"pname"は、インスタンス名ですか? それとも変数名ですか? TextField.textプロパティを操作している様子が見られないので、取りあえず変数名と「推理」しました。 引用: MC(unit)に配置されたMC(t1)には画像を読み込むためのMC(base)と、テキストを読み込むダイナミックテキストエリア(pname)が配置されており、1フレーム目に以下のスクリプトを設定しております。 「loadVarsの箇所」というのは、LoadVars.onLoadイベントのコールバック関数内ということですか?「t1」は、MovieClipインスタンスではないのでしょうか?「読み込まれ」たということは、スクリプトは正しく記述されていると推測されます。おそらく、以下のご説明が不正確なのでしょう。 引用: loadVarsの箇所で a1 = 1; i = 1; test = a+i; としても、testには値1は入力されません。ここも、スクリプトか以下のご説明のいずれかが誤っていると思われます。問題を絞込まないと、テストやご説明が乱雑になりがちです。 引用: またサムネールのMC(t1)のフレームに ステートメントを以下に変更して、出力とそのタイミングにご注目ください。
引用: あらためてお聞きしたいのは新たに生成したloadVarsインスタンス(この場合では「theLoadVars」)はどの階層に存在し、他のMCから参照する場合ではどのような階層指定となるのでしょうか?今回の場合ですと、theLoadVarsというインスタンスはMC(unit)にあり、MC(unit)の下のMC(t1)からtheLoadVarsに読み込まれた変数「dnum_1」への参照は_parent.theLoadVars.dnum_1ではないのでしょうか? |
野中文雄 | Åê¹ÆNo.17264 投稿日時: 2005-5-16 18:09 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: loadVarsで読み込まれた変数の階層 1点修正した方がよいでしょう。
引用: tomoakiraさんは書きました: |
tomoakira | Åê¹ÆNo.17266 投稿日時: 2005-5-16 18:35 |
新米 居住地: 千葉 投稿: 9
使用環境:
Win2000, |
Re: loadVarsで読み込まれた変数の階層 構造不理解のまま書き込んでしまいました。
誤解が発生しないよう、修正しておきました。 野中さん修正ありがとうございます。 |
colon | Åê¹ÆNo.17269 投稿日時: 2005-5-16 20:40 |
新米 居住地: 世田谷区 投稿: 21
使用環境:
Mac OS X Flash MX Professional 2004 Safari,IE |
Re: loadVarsで読み込まれた変数の階層 tomoakira様、野中様
ご親切なご回答ありがとうございました! 投稿が不十分かつ、ミスもあり申し訳ありませんでした。 おっしゃれられたように一度に複数のことをやろうとしていたため、スクリプトの実行タイミングを見落としておりました。 おかげさまでこの様にして意図していることが上手くいきました。 また以前の投稿ではちゃんと書いていなかったのですが、MC(t1)の中にはインスタンス名が「pname」のダイナミックテキストエリアでした。申し訳ありません。 fileNum = 6; leftX = t1._x; margin = 10; twidth = t1._width; theight = t1._height; theLoadVars = new LoadVars(); theLoadVars.onLoad = function(theSource) { xSetName(); }; theLoadVars.load("test.txt"); function xSetName() { for (var i = 1; i<=fileNum; ++i) { newName = "t"+(i+1); targetM = "t"+i; duplicateMovieClip(eval(targetM), newName, i+1); this[newName].name = "this.dnum_"+i; if (this[newName]._x>=twidth*3+margin*2+leftX) { this[newName]._x = leftX; this[newName]._y += theight+margin; } else { this[newName]._x += twidth+margin; } this["t"+i].pname.text = theLoadVars["dnum_"+i]; } } またここのところですが、修正前のtargetM = "t"+i;を指定しないとthisでは「theLoadVars」を指さないということなのでしょうか?なんか、this.this....みたいな感じでこんがらがってしまってます。 質問ばかりで申し訳ありませんがよろしくお願いいたします。 引用:
|
tomoakira | Åê¹ÆNo.17275 投稿日時: 2005-5-16 23:13 |
新米 居住地: 千葉 投稿: 9
使用環境:
Win2000, |
Re: loadVarsで読み込まれた変数の階層 元の記事を修正したことが、返って誤解を招いたみたいですみません。
最初に自分が提示したコードが
だったので、ターゲット指定のミスがあり (5行目頭のthisはtheLoadVarsを指すので、theLoadVars.t1.pname等ではパスが間違えてるのでundefinedになります。) 上記のままでは動かないコードだったので、野中さんに修正して貰ったのが
となります。 theLoadVars.target_mc = this; スクリプトが書かれているのがMC(unit)なので、 thisが代入されてtheLoadVars.target_mcはこの場合_root.unitを意味する事になり、 this.target_mc["t"+j].pname = theLoadVars["dnum_"+j]; スクリプトが書かれているのがtheLoadVars.onLoad = functionなので、this.target_mcはtheLoadVars.target_mcを指し、 _root.unit["t"+j].pname = theLoadVars["dnum_"+j]; という意味になり正常に動きます。 |
野中文雄 | Åê¹ÆNo.17278 投稿日時: 2005-5-17 8:18 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: loadVarsで読み込まれた変数の階層 「ここのところ」が、どこのところかわかりませんでした。せめてそこのステートメントを引用いただけると、理解しやすかったと思われます。
引用: colonさんは書きました: なお、つぎのように書替えることも可能です。
さらに、Delegateクラスを使うことも考えられるでしょう。
|
colon | Åê¹ÆNo.17286 投稿日時: 2005-5-17 20:45 |
新米 居住地: 世田谷区 投稿: 21
使用環境:
Mac OS X Flash MX Professional 2004 Safari,IE |
Re: loadVarsで読み込まれた変数の階層 tomoakira様、野中様
とてもご丁寧に説明頂いて、大変わかりやすく、またあらたな方法まで教えて頂いて、とても勉強になりました。もやっとしてたものが晴れた思いです! 元々スクリプトが苦手でこつこつと覚えてきたつもりでおりましたが、やっぱりまだまだ基礎ができていなと実感しました。 この度は、本当にありがとうございました! ふつつか者ですが今後ともどうぞよろしくお願いいたします(ペコリ) |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |