• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部テキストファイルから座標データを読み込み,その座標にムービークリップを配置する)

外部テキストファイルから座標データを読み込み,ムービークリップを配置

このQ&Aのポイント
  • 外部テキストファイルから座標データを読み込み,その座標にムービークリップを配置する方法を教えてください。
  • ムービークリップを配置するためには外部テキストファイルのデータを行ごとに読み込む必要があります。
  • オブジェクト指向を使わずにプログラムを作成する方法を教えてください。

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

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

#1 です。 すみません,返事の回答が遅くなりました。 >変更案1で試してみようと思います. そうですか。データの形を変えられるのでしたら楽です。 > これに関してなのですが, > ファイル数というのは配置するムービークリップの数ということでしょうか? そうですそうです。すみません,書き間違えです。 #1の回答(補足要求)を書いているうちに, 現存する ムービークリップ(以下MCと略)の座標指定ではなく, ロードする外部ファイル(JPEG や SWF など)の座標を指定するということに勝手にすり変わっていました。 ですから,他の場所(XMLのノード名)など,少しズレた名前になっています。 ファイル数ではなく配置するムービークリップの数のことです。 そういうわけで, サンプル例を回答します。 SWF と, それを表示させる HTML と, 外部テキストファイル を同じフォルダに入れてあるとします。 外部テキストのファイル名は,「mcdata.txt」(MCデータの意味)ということにしておきます。 「mcdata.txt」の内容データ例を次のようにします(コピペ可能)。 ------------------------------------- mcNum=5& &name0=0&x0=10&y0=20& &name1=1&x1=20&y1=24& &name2=2&x2=30&y2=28& &name3=3&x3=40&y3=32& &name4=4&x4=50&y4=34& ------------------------------------- Flash を起動させて, 上の「mcdata.txt」と同じフォルダに, 新規ドキュメントを保存して フレーム1 に書きます(コピペ可能)。 ///////////////////////////////////////////////////// // MCを作成するユーザ定義関数 makeMC の定義(本来不要) function makeMC(n) { for (i=0; i<=n-1; i++) { // 空のMC myMC? を 深度 i に作成 _root.createEmptyMovieClip("my_mc"+myLV["name"+i], i); // パスの変数化 mm = _root["my_mc"+myLV["name"+i]]; // 初期座標指定(見えないところ) mm._x = mm._y=-100; // MC名入りテキストフィールドの作成 mm.createTextField("my_txt", 0, 0, 0, 80, 60); mm.my_txt.border = true; mm.my_txt.background = true; mm.my_txt.backgroundColor = 0xCCCCCC; mm.my_txt.text = "my_mc"+myLV["name"+i]; // 確認のためMCを一応ドラッグ可能にしておきます mm.onPress = function() { this.startDrag(); this.my_txt.backgroundColor = 0xEEEEEE; }; mm.onRelease = mm.onReleaseOutside=function () { this.stopDrag(); this.my_txt.backgroundColor = 0xCCCCCC; }; } } // //--- ↑以上は本来不要です↑ --- //--- ↓以下が本題部分です↓ --- // // LoadVarsクラスのインスタンス myLV を作成 myLV = new LoadVars(); // // myLV にデータが読み込まれたときの動作定義 myLV.onLoad = function(Seikou) { // ロード成功時 if (Seikou) { //ユーザ定義関数 makeMC の実行(本来不要) makeMC(this.mcNum); // 各MCの座標指定 for (i=0; i<=this.mcNum-1; i++) { _root["my_mc"+this["name"+i]]._x = this["x"+i]; _root["my_mc"+this["name"+i]]._y = this["y"+i]; } } else { // ロード失敗時 trace("テキストファイルのロード失敗"); } }; // // 外部テキストのロード myLV.load("mcdata.txt"); ///////////////////////////////////////////////////// そして, 「制御」→「ムービープレビュー」してもらうと, 即,動作確認ができると思います。 各MCは重なって表示されますから,確認がしにくいと思ってドラッグ可能にしていますから, ドラッグして確認してみてください。 ~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・~・ ◎ 以下の長い説明は   上のコードだけで理解できた場合,全く不要です。   適当に読み流してください。 MCは本来 Flash 内にすでに作成されていると思うため, 上のスクリプトの上半分が不要な部分です。 MCのインスタンス名に数字のみを付けるのは良くないことなので, my_mc0,my_mc1,my_mc2,… のような,文字列+数字 というインスタンス名を付けた場合として考えています。 改行の前と後に & を書いているのは, 改行コードというゴミが変数の値の中に入るのを防止するためです。 上のスクリプトでは, myLV という LoadVars クラスのインスタンス(外部から読み込んだテキストデータの入れ物)を作成して, その myLV に外部テキストデータを全て入れこんでいます。 この myLV から目的の値を取りだしてそれぞれの処理をさせます。 外部データを 読み込む前 に色々な動作をさせても, 肝腎のデータがないのですから座標の指定などはできません。 したがって, myLV.onLoad = function() { } で, myLV に外部テキストデータの読み込み終了次第, myLV から必要なデータを取りだすような動作をさせています。 このロード待ちの処理が必要である辺が,Web系 の面倒臭いところです。 その myLV.onLoad 内のスクリプトに関してですが, おそらくこの部分↓がややこしいのではないかと思います。 _root["my_mc"+this["name"+i]]._x = this["x"+i]; [ ] は配列アクセス演算子と呼ばれる物で, 動的に違う変数やインスタンスにアクセスするときに使うことができます。 [ ] 内は1つの階層として Flash が扱ってくれます。 また,この場合(この場合に限って)の this は myLV のことを指します。 したがって, this["name"+i] これ↑は,「myLV 内の変数 name0~4 の値」 という意味になります。 name の後の 0,1,2,3,4 は for文によって切り替えています。 「name0~4 の値」は外部テキストで指定した 0,1,2,3,4 です。 したがって, _root["my_mc"+this["name"+i]] これ↑は 「_root.my_mc0~4」 のMCインスタンスということになります。 ですから, _root["my_mc"+this["name"+i]]._x これ↑は 「_root.my_mc0~4 の x座標」ということになります。 したがって, _root["my_mc"+this["name"+i]]._x = this["x"+i]; この1行をトータルで考えると, 「_root.my_mc0~4 の x座標 を myLV 内の変数 x0~4 の値に設定する」 ということになります。 たまたま, MC の名称 my_mc0~4 と,for文の i の 0~4 がかぶっているため,わかりにくくなっていますが, 0~4 のように連番でないインスタンス名でも指定できます↓。 例えば外部テキスト 「mcdata.txt」 の内容データ例を次のように変えて, 「制御」→「ムービープレビュー」しなおしてもらうと, インスタンス名などを変更したときの実験検証できると思います(コピペ可能)。 ------------------------------------- mcNum=10& &name0=A&x0=10&y0=20& &name1=B&x1=40&y1=22& &name2=C&x2=60&y2=26& &name3=D&x3=75&y3=32& &name4=E&x4=88&y4=40& &name5=F&x5=98&y5=50& &name6=G&x6=106&y6=62& &name7=H&x7=112&y7=76& &name8=I&x8=116&y8=92& &name9=J&x9=117&y9=110& ------------------------------------- 「LoadVars.onLoad」 と 「配列アクセス演算子」 とをネット検索してもらうと, その他詳細がだいたいはわかるのではないかと思います。 Google検索 「LoadVars.onLoad」 http://www.google.co.jp/search?hl=ja&q=LoadVars.onLoad Google検索 「配列アクセス演算子」 http://www.google.co.jp/search?hl=ja&q=%22%E9%85%8D%E5%88%97%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%BC%94%E7%AE%97%E5%AD%90

ekaki_san
質問者

お礼

大変わかりやすくご解説いただきありがとうございました. とても勉強になりました. ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

データの形が悪いですよ。 そのままだと,できたとしても変な労力がやたらかかります。 name=0, x=10, y=20 &name=1, x=11, y=21 &name=2, x=12, y=22 これを,操作しやすいデータ形式に変更はできないものでしょうか。 変更案1. 変数と値をちゃんとした1対1対応にできませんか? <変更例> name0=0&x0=10&y0=20& &name1=1&x1=11&y1=21& &name2=2&x2=12&y2=22& 変更案2. XML 形式にすることはできませんか? <変更例> <?xml version="1.0" encoding="Shift-JIS"?> <file> <fileNode name="0" x="1" y="2" /> <fileNode name="1" x="11" y="21" /> <fileNode name="2" x="12" y="22" /> </file> 変更案3. CSV 形式にすることはできませんか? <変更例> 0,10,20 1,11,21 2,12,22 変更案1 の場合は,LoadVarsクラス(LoadVarsオブジェクト)のメソッドでなんとかなります。 できれば, name0 の前に, filenum=20 などというようなファイル数を示すデータがあった方が良いですが。 変更案2 の場合は,XMLクラス(XMLオブジェクト)のメソッドでなんとかなります。 変更案1 もしくは 変更案2 のようにするのが普通です。 変更案3 でもできなくはありませんが手間です。 また,改行コードが \n であるのか \r であるのか \r\n であるのかによって, データ行を split する文字列が変わります。 変更案3のゴミだらけバージョンがご質問のデータ形式だと言う感じだと思います。 ですから, 変更案3のデータが処理できるようしたあと,次にゴミ削除の処理が入ります。 したがってそのままだと,できたとしても変な労力がやたらかかることになります。 変更案1~3までに変更できるのでしたら,それなりに考えてみても良いとは思いますが, 変更可能か変更不可能かがわかりませんので,即答はできません。 絶対にデータ形式を変更できない場合は,改行コードだけでも補足してください。 また,縦向きデータ(改行前後)ではなく, 横向きデータのデータ間に 「,(カンマ)」 と 「" "(半角空白文字)」が入っていますが, この半角空白文字はデータなのか,データ区切りなのか,半角空白文字も入れたままで変更できないのかどうかのところも補足してください。 考えればなんとかできるかもしれません(考えたあげくできないかもしれませんが)。

ekaki_san
質問者

補足

ご返信ありがとうございます.大変参考になります. 外部テキストファイルに関しては自由に変更可能です. XMLに関してはあまり馴染みがないので, 変更案1で試してみようと思います. > name0 の前に,filenum=20などというようなファイル数を示すデータがあった方が良いですが。 これに関してなのですが,ファイル数というのは配置するムービークリップの数ということでしょうか?これに関しても出力することは可能です. ※今回,C言語で作ったシミュレータの可視化にFLASHを使用しようと思っていますので,出力は自由に変更できます.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 外部テキストファイルより座標データを読み込み、ムービークリップを配置し画像を読み込ませる

    外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに画像を読み込ませ、さらにムービークリップにロールオーバー時にテキストボックスがポップアップででてくるというスクリプトを組みたいのですが、なかなかうまくいきません。まだまだ知識不足なもので、どなたかご教授頂けないでしょうか?よろしく御願い致します。 外部テキストファイル↓ mcNum=10& &name1=1&x1=20&y1=20&text_a1=サンプル店名(1)&text_b1=店の説明(1)& &name2=2&x2=40&y2=40&text_a2=サンプル店名(2)&text_b2=店の説明(2)& &name3=3&x3=60&y3=60&text_a3=サンプル店名(3)&text_b3=店の説明(3)& &name4=4&x4=80&y4=80&text_a4=サンプル店名(4)&text_b4=店の説明(4)& &name5=5&x5=100&y5=100&text_a5=サンプル店名(5)&text_b5=店の説明(5)& &name6=6&x6=120&y6=120&text_a6=サンプル店名(6)&text_b6=店の説明(6)& &name7=7&x7=140&y7=140&text_a7=サンプル店名(7)&text_b7=店の説明(7)& &name8=8&x8=160&y8=160&text_a8=サンプル店名(8)&text_b8=店の説明(8)& &name9=9&x9=180&y9=180&text_a9=サンプル店名(9)&text_b9=店の説明(9)& &name10=10&x10=200&y10=200&text_a10=サンプル店名(10)&text_b10=店の説明(10)

  • 外部テキストファイルより座標データを読み込み、ムービークリップを配置し画像を読み込ませる

    たびたびすみません、追記いたします。 外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに座標を割り当て、画像を読み込ませ、さらにそのムービークリップのロールオーバー時に、あらかじめ作成しておいたテキストボックスに店名と簡単な店舗詳細を表示するというスクリプトを組みたいのですが、なかなかうまくいきません。使いどころとしては地図にそれらのムービークリップを配置し、そのランドマーク画像にロールオーバーしたら店舗詳細が現れるといったものを作りたいです。いろいろなサイトや本を参考にしながら下記スクリプトを作成致しましたが、うまくうごきません。たぶんloadMovieの読み込みのタイミングあたりがおかしいのだと思いますが、ムービークリップを新規に作成するときに、フレームアクションで画像の読み込みとその後の処理をどうやって記述したらよいのかがわかりません。まだまだ知識不足なもので、どなたかご教授頂けないでしょうか?よろしく御願い致します。 ↓フレームアクション↓ function makeMC(n) { for (i=1; i<=n; i++) { _root.createEmptyMovieClip("mc"+myLV["name"+i],i); mmLD = new Object(); mmLD.onData = function(LDOK) { if (LDOK) { _root["mc"+myLV["name"+i]].onPress = function() { _root.t_box.text_a.text = this["text_a"+i]; _root.t_box.text_b.text = this["text_b"+i]; }; _root["mc"+myLV["name"+i]].onRelease = _root["mc"+myLV["name"+i]].onReleaseOutside=function () { _root.t_box.text_a.text = ""; _root.t_box.text_b.text = ""; }; } else { trace("イメージファイルのロード失敗"); } mmLD.loadMovie("images/"+i+".jpg"); }; } } myLV = new LoadVars(); myLV.onLoad = function(TEXTOK) { if (TEXTOK) { makeMC(this.mcNum); for (i=1; i<=this.mcNum; i++) { _root["mc"+this["name"+i]]._x = this["x"+i]; _root["mc"+this["name"+i]]._y = this["y"+i]; } } else { trace("テキストファイルのロード失敗"); } }; myLV.load("mcdata.txt"); ↓あらかじめ作成したムービークリップの詳細↓ インスタンス名「t_box」というムービークリップの中に「text_a」「text_b」というダイナミックテキストが入っております。 ↓外部テキストファイル↓ mcNum=10& &name1=1&x1=20&y1=20&text_a1=サンプル店名(1)&text_b1=店の説明(1)& &name2=2&x2=40&y2=40&text_a2=サンプル店名(2)&text_b2=店の説明(2)& &name3=3&x3=60&y3=60&text_a3=サンプル店名(3)&text_b3=店の説明(3)& &name4=4&x4=80&y4=80&text_a4=サンプル店名(4)&text_b4=店の説明(4)& &name5=5&x5=100&y5=100&text_a5=サンプル店名(5)&text_b5=店の説明(5)& &name6=6&x6=120&y6=120&text_a6=サンプル店名(6)&text_b6=店の説明(6)& &name7=7&x7=140&y7=140&text_a7=サンプル店名(7)&text_b7=店の説明(7)& &name8=8&x8=160&y8=160&text_a8=サンプル店名(8)&text_b8=店の説明(8)& &name9=9&x9=180&y9=180&text_a9=サンプル店名(9)&text_b9=店の説明(9)& &name10=10&x10=200&y10=200&text_a10=サンプル店名(10)&text_b10=店の説明(10) どうかよろしく御願い致します。

    • ベストアンサー
    • Flash
  • 外部データから_x座標に(Flash Lite1.1)

    Flash Lite1.1において、外部データからムービークリップの_x座標を設定したいのですがどのようにすればできるのでしょうか?? 【abc.txt】 x=100&y=200 というテキスト外部データがあり。 ムービークリップの座標に設定したいのです。 以下ソースだけではできないのでしょうか?ご教授よろしくお願いします。 loadVariables("abc.txt",_root); _x = x; _y = y;

    • ベストアンサー
    • Flash
  • ムービークリップの座標AS

    アクションスクリプトの勉強中で、質問があります。 ムービークリップをx座標20、y座標20に移動した場合にフレームをストップするためには、 どのような命令をすればいいのでしょうか・・・。 無知で大雑把な質問すみません。

    • ベストアンサー
    • Flash
  • 外部ファイル読み込む用の ムービークリップのインスタンスを配置

    大変初歩的な質問で申し訳ございません。 アクションスクリプトの質問というよりかflashの操作の方になると思います。 Flashのおもしろさにハマり、初心者ながら勉強しているところで、 やはりActionScriptの知識もあるとまた幅が広がって楽しいだろうなと勉強し始めました。 それで、ActionScriptの書籍を注文したのが届くまで、「写真紹介ムービーを作りながら、ActionScriptの基礎を理解していこう」 という親切なサイト様を見つけまして、まずは全く分からないところがあっても、 調べながらでも最後まで作ってみれば少しは言語を知ることができるだろうと、一章、二章と進めていっておりました。 ttp://flash.frogstone.jp/as2_basic/index.html ALPHA FROGさま それで行き詰ってしまったのが ttp://flash.frogstone.jp/as2_basic/chapter4/1.html swfファイルの軽量化の「外部ファイル読み込む用の ムービークリップのインスタンスを配置」 「pict_mcと、thumbnail_mcには、外部ファイルを読み込むためのムービークリップのインスタンス(以下base_mc)を配置しています。 このbase_mcは外部ファイル読み込み専用のムービークリップで、中身は何もありません。」 の部分です。なかなか伝わりにくい部分もあって申し訳ないのですが、 アドバイスしていただける方がいましたらよろしくお願い致します。 現状ではシーン1にpict_mcとthumbnail_mcは配置されております。 それでどこを探してもbase_mcが見つからなく、どこにActionScriptを記述すればいいのだろうかと、分かりません。 探しても考えても分からず、こちらに質問させていただきました。 もしお分かりになる方がいましたらよろしくお願いしたします。 あと初心者がActionScriptに入りやすい書籍やサイト様がありましたら 教えていただけると嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • Suzkaでダイナミックテキストに座標を表示

    FLASH Suzkaで作成しています。 ダイナミックテキストに座標を表示させたいのですが、 下記のサイトを参考にしましたが、うまくいきません。 http://orange.2-d.jp/flash/action/20_mouse_xy_get_preview.html ↓「FLASHでの座標取得」-過去記事-教えて!goo http://oshiete1.goo.ne.jp/qa1087211.html x座標とy座標を表示させるためのダイナミックテキストと、 スプライト1を用意してこのように並んでいます。 スプライト1 x座標 y座標 スプライト1には、下記のスプリクトを記入しました。 onClipEvent (enterFrame) { _root.x=_root._xmouse; _root.y=_root._ymouse; } あと、過去記事を読むとダイナミックテキストをムービークリップにと 書いていたので、ムービークリップ=スプライト?(Suzuka)と解釈して x、y座標のダイナミックテキストを、それぞれスプライトにして試しましたが うまくいきませんでした。 Suzukaで座標をダイナミックテキストに表示する方法を 教えてください。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • AS3 ムービークリップの配置について

    ステージ上に、ムービークリップ mc1 mc2 があるとします。 mc2の24フレーム目の中に、mc3を配置し、mc2の24フレーム目にこんなプログラムを書くとします。 //一秒後に、mc3を移動      mc3.y=260;      mc3.x=MovieClip(parent).mc1.x; すると、mc3の配置は、mc2を基準としたx.y軸で配置されてしまいます。 (すいません。 言葉での説明が難しいです。) 私は、ステージを基準として配置したいのですが、いったいどのように書けばいいですか? ちなみに以下のようにすると私の求めていた結果が得られました。 ステージ上の見えない所に mc3を置いて、mc2の24フレームに      MovieClip(parent).mc3.y=260      MovieClip(parent).mc3.x=mc.x; 正直言葉での説明が難しく、わかりにくいかと思いますが回答よろしくお願いします。

    • ベストアンサー
    • Flash
  • ■VB■テキストから座標を得るには?

    分析データを解析したいです。そのデータは、テキストファイルとして、1行目から20行目までは、分析条件等の文字列が並び、それ以降の行には、強度としての数値が並びます (1行目~) #分析条件 (21行目~) 数値(整数) 21行目以降は、各座標(エネルギー)ごとの強度で、この各行を変数として取り扱うにはどうすればいいですか? まず、このデータをx(エネルギー)-Y(強度)図にプロットしたいのですが、、、

  • ムービークリップ

    ムービークリップをクリックすることによって、 他のムービークリップの位置を変更できますか? もしくは他のムービークリップの複製はできますか? 今はクリックしたムービークリップ(自分自身)の 複製は出来ています。 on (release) { this.duplicateMovieClip("Photo_big", 0); _root.Photo_big._xscale = 80; _root.Photo_big._yscale = 80; _root.Photo_big._x = 350; _root.Photo_big._y = 200; } ちなみに移動したいムービークリップのインスタンス名は text1です。

    • ベストアンサー
    • Flash
  • テキスト入力と同じ名前のムービークリップを配置したい

    FLASH8を使っています。 動物のムービークリップがいくつかあり、シンボルプロパティで名前と識別子を同じものに設定しました。例えば「うま」というようにひらがなで同じ名前が入力されています。 リンケージの「ActionScriptに書き出し」と「最初のフレームに書き出し」にはチェックが入っています。 ステージ上のテキストフィールドに「うま」と入力し、ボタンをクリックすると同じ名前のムービークリップシンボルがステージ上に配置されるようにしたいのですが、どのように書けばいいでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Flash