ムービークリップをクリックして番号を表示する方法

このQ&Aのポイント
  • ActionScriptを使用して、ムービークリップをクリックした際に個別の番号をテキスト欄に表示させる方法を説明します。
  • ムービークリップを複製する際に使用するduplicateMovieClip()関数を使い、ユニークなインスタンス名を生成します。
  • その後、onReleaseイベントを使用して、クリックされたムービークリップの番号を取得し、テキスト欄に表示させることができます。
回答を見る
  • ベストアンサー

for & duplicateMovieClip & function

for & duplicateMovieClip & function // == info用テキスト作成 ==================== /**/ var H_TextFieldInfo = _root.createTextField("I_textField",1001 ,10 ,10 ,690 ,20); _root.H_TextFieldInfo.text = ""; // 文字列を表示 テキスト表示テスト // == データ読み込み ============================== for(Hi=2; Hi<=10; Hi++){ H_name01 = "I_MC"+ Hi; H_gFX = I_MC01._width * Hi; H_gFY = 10; // ************ _root.I_MC01.duplicateMovieClip (H_name01, (201+Hi), {_x:H_gFX ,_y:H_gFY }); H_num = Hi; _root[H_name01].onRelease = function(){ _root.H_TextFieldInfo.text = H_num; } // ************ } ステージ上に I_MC01 というインスタンス名でムービークリップを配置して、上記のようなアクションスクリプトを書きました。for分の_root.I_MC01.duplicateMovieClip でI_MC01を複製し、その複製したムービークリップをクリックすると、テキストに番号が入力されるようにしたつもりなのですが、出来ませんでした。 いくつか思いつくことをやってみたのですが、出来ませんでした。 このようなときムービークリップをクリックすると、個別の番号をテキスト欄に表示させるにはどうしたらよいのでしょうか? ご教授よろしくお願いします。

  • Flash
  • 回答数1
  • ありがとう数3

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

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

各ムービークリップ内の変数として Hi を保存し 各ムービークリップクリック時に 個々内の変数 を参照で呼びださせれば良いと思います。 ※イメージは下図↓ 具体的には次の部分↓を // ************ _root.I_MC01.duplicateMovieClip (H_name01, (201+Hi), {_x:H_gFX ,_y:H_gFY }); H_num = Hi; _root[H_name01].onRelease = function(){ _root.H_TextFieldInfo.text = H_num; }; // ************ 次のように↓換えればできます。 // ************ _root.I_MC01.duplicateMovieClip(H_name01, (201 + Hi), {_x:H_gFX, _y:H_gFY}); //↓各 MC 内の 変数H_num に個別の Hi を代入 _root[H_name01].H_num = Hi; _root[H_name01].onRelease = function() { //↓各 MC 内の変数 H_num をテキストフィールドに表示 _root.H_TextFieldInfo.text = this.H_num; }; // ************ === 別法1 ====== 関数の中に Hi を固定してしまっても良いと思います。 具体的には次の部分(最後の部分)↓を // ************ _root.I_MC01.duplicateMovieClip (H_name01, (201+Hi), {_x:H_gFX ,_y:H_gFY }); H_num = Hi; _root[H_name01].onRelease = function(){ _root.H_TextFieldInfo.text = H_num; }; // ************ } 次のように↓書き換えればできます。 // ************ _root.I_MC01.duplicateMovieClip(H_name01, (201 + Hi), {_x:H_gFX, _y:H_gFY}); //↓各MCクリック時の関数として 関数closureFunc の戻り値を代入 _root[H_name01].onRelease = closureFunc(Hi); // ************ } //関数 closureFunc の定義 function closureFunc(H_num) { //関数を返す return function () { //渡された H_num の値をテキストフィールドに表示 _root.H_TextFieldInfo.text = H_num; }; } === 別法2 ====== 「個別の番号をテキスト欄に表示させる」"だけ" でしたら MCの名前の最後をテキスト欄に表示させても良いですね。 具体的には次の部分↓を // ************ _root.I_MC01.duplicateMovieClip (H_name01, (201+Hi), {_x:H_gFX ,_y:H_gFY }); H_num = Hi; _root[H_name01].onRelease = function(){ _root.H_TextFieldInfo.text = H_num; }; // ************ 次のように↓書き換えればできます。 // ************ _root.I_MC01.duplicateMovieClip(H_name01, (201 + Hi), {_x:H_gFX, _y:H_gFY}); _root[H_name01].onRelease = function() { _root.H_TextFieldInfo.text = this._name.split("I_MC")[1]; }; // ************ this._name で 「I_MC○」 という自分の名前を取得し その名前を文字列 「I_MC」 で区切って配列にし その配列の 2つめの要素 [1] を取って来るという内容です。 ※配列の要素番号は 0 から始まるので 1 は2つ目  

goo2408
質問者

お礼

書き込みありがとうございます。 問題解決できました。大変助かりました。 今回は1を例にやりました。他例も試してみたいと思います。 ありがとうございました。

関連するQ&A

  • forとduplicateMovieClip

    for文とduplicateMovieClipを覚える事を目的に、アンケート用紙のようなムービーを作ろうとしています。 一つのMCを用意し、「MC」とインスタンス名をつけました。その中に四角の絵(□)とダイナミックテキストが一つずつ入れてあります。ダイナミックテキストには変数名HT_answerとつけてあります。 フレームから下記の様にASを書きました。 var HanswerBox:Array = ["Answer1","Answer2","Answer3","Answer4"]; _root.MC.HT_answer = HanswerBox[0]; for(i=1;i<=3;i++){ _root.MC.duplicateMovieClip (["MC"+i],i,{_x:_root.MC._x ,_y:_root.MC._y+(50*i)}); _root["MC"+i].HT_answer = HanswerBox[i]; _root["MC"+i].onRelease = function(){ Hflag = i; trace(Hflag); } } これでプレビューするとステージには下記のかたちで表示されます。 □ Answer1 □ Answer2 □ Answer3 □ Answer4 クリックするとチェックマークが入るというものを作ろうとしているのですが、Hflag = i で項目毎に番号宣言させて、その番号にしたがってチェックマークを表示させようと考えたのですが、なぜかすべて Hflag は 4 と出力されてしまいます。これはなぜなのでしょうか?まだfor文とduplicateMovieClipは覚えたばかりなので、理解に間違いがあるだとは思うのですが、どうにも上手くいかずに困っています。 for文、duplicateMovieClipなど、この辺りのご指摘と共にご回答をいただきたく思います。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • duplicateMovieClipしたMCをSharedObjectで保存、読み込みたい

    【やりたいこと】 duplicateMovieClipで何個も複製したムービークリップをSharedObjectで保存し(て読み込み)たい。 【わからないこと】 ユーザーが何個複製するかわからないものをi変数でカウントして それをSharedObjectで保存しようとしているが、 ユーザーが何個複製するかわからないMCに対する 一括命令文?がうまく書けない。 【現状】 まず、MC_printというMCの中にisuというMCがあります。 そのisuの上に空ボタンを置いて、以下のような スクリプトを書きました。 on (press) { _root.MC_print.isu.duplicateMovieClip("isu"+i, i++); //isuというMCをクリックするたびに複製していく _root.MC_print["isu"+i]._x = 500; //重なるので移動させてる } そして、保存ボタンに on (press) { _root.Save_Point(); } と書いていて、 SharedObjectインスタンスの生成は mySharedObject = SharedObject.getLocal("xypoint","/"); としています。 そして肝心のfunction命令文を function Save_Point() { mySharedObject.data["isu"+i._x] = _root.MC_print["isu"+i]._x; mySharedObject.data["isu"+i._y]= _root.MC_print["isu"+i]._y; } としています。 が、動きません。 理由は自分でもなんとなくわかるのですが、 複製されたMCが何個複製されたかわからない。 iの変数がちゃんと共有されてないんじゃないかと思っています。 が、_global変数にしても「isu1」「isu2」という風に インスタンス名を_nameで調べてテキストボックスで確認しても 複製はされてるが、このfunction命令文だとそのインスタンス名毎に (全てに)命令されてないってことですよね・・・。 for文とかを使うんでしょうか。でも何個複製されるか わからないし・・・。よくわかりません・・・。 環境はWindowsXP、FlashMXです。 MX以前の時代から突然またフラッシュを触り始めたので 新しいスクリプトなどはまったくわかりません。 なにかヒントでもいただければ幸いです。どうぞよろしくお願いいたします。

  • duplicateMovieClip

    FlashMXで、duplicateMovieClipで背景部分のムービークリップを複製したのですが、 複製したムービークリップが前面に出てしまいます。 解決方法はありませんか?

  • 条件式の中に入れるとムービークリップが動作しない。

    条件式の中に入れるとムービークリップが動作しない。 またまた、悩みにはまってしまいました。 初期状態で、ボタンのムービークリップを全て、ラベルreadyの静止画像に設定し、 クリックされたときに、そのボタンのラベルhitに移動して、 そこに設定されたムービークリップの動作をさせようとしています。 以下のようなアクションスプリクトを書きましたが、 hitに移動するものの、hitに設定したムービークリップの、 1フレーム目の静止画像しか表示されません。 試しに6行目の_root[buttonName].gotoAndStop("ready"); のreadyをhitに変えると、hitラベルのムービークリップが動作します。 原因は何なのでしょうか??? ////////////////////////////////////////////////////////// var onMapButton_num = 0; onEnterFrame = function () { var buttonName = "onMapButton" + onMapButton_num + "_mc"; for ( var i:Number = 1; i < 6; i++) { // 初期設定 buttonName = "onMapButton" + i + "_mc"; _root[buttonName].gotoAndStop("ready"); //ボタンをすべて ready に } for ( var i:Number = 1; i < 6; i++) { // アクション if ( onMapButton_num== i ) { // ボタンが押された場合 buttonName = "onMapButton" + i + "_mc"; _root[buttonName].gotoAndStop("hit");     // ヒットしたボタンを hit に } } }; // ボタン(1~5)のアクションと 番号の取得 ////////////////////////////////// onMapButton1_mc.onRelease = function() { onMapButton_num = 1; }; onMapButton2_mc.onRelease = function() { onMapButton_num = 2; }; onMapButton3_mc.onRelease = function() { onMapButton_num = 3; }; onMapButton4_mc.onRelease = function() { onMapButton_num = 4; }; onMapButton5_mc.onRelease = function() { onMapButton_num = 5; }; stop();

  • 【action script】複数のMCを・・・

    環境:Flash8 actionscript2.0 10こ程度のムービークリップをそれぞれクリックした時に同じ動きをさせる文を1つにまとめることは可能でしょうか? ムービークリップそれぞれに mc1 mc2 mc3 …mc10 とインスタンス名をつけています。 さらにその下位層に mc1  └kai_mc mc2 └kai_mc ・ ・ ・ mc10 └kai_mc と置いています。 このそれぞれのムービークリップをクリックした際、その下位層のムービークリップを次のフレームに移動させたいと考えています。 それぞれ個別に書くと _root.mc1.onRelease=function(){ _root.mc1.kai_mc.nextFrame() } と書いていたのですが、ムービークリップの数を増やすかも知れずムービークリップの数分書くのは大変なので1つにまとめたいと考えています。 自分で以下のように書いてみました。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ _root["mc"+i].kai_mc.nextFrame() } } うまくいかないので試行錯誤したりtraceで調べたりしたのですがどうもよくわかりません。 i=0 for(i=1; i>10; i++){ _root["mc"+i].onRelease.function(){ trace(i) } } で出力すると 11と表示されるのでpassが違うとは思うのですが・・・ iを1~10で指定しているのになぜ11となるのでしょうか? どうすればpass指定できるのでしょうか? そもそものやり方、考え方が違うかどうかも含め、教えて頂きたく質問しました。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ムービークリップ

    ムービークリップをクリックすることによって、 他のムービークリップの位置を変更できますか? もしくは他のムービークリップの複製はできますか? 今はクリックしたムービークリップ(自分自身)の 複製は出来ています。 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
  • eval関数を利用して複数の処理を1つのfunctionで行う

    こんにちは。 困ったので質問させてください。 今、MX2004のFLASHを使ってあるゲームを作成しています。 「XXX」とリンゲージ名をつけたムービークリップを          for(i=0;i<=100;i++){     obj = _root.attachMovie("XXX", "mc"+i, i);//MCの作成     obj._x = table_x[i];//X軸の値の格納テーブル     obj._y = table_y[i];//Y軸の値の格納テーブル     } で100個のムービックリップを画面上に『mc+連番(以下「mc●●」)』と名前をつけてで作成しました。 この画面上に作成したムービークリップmc●●をクリックするとTraceで「OK」と表示したいのですが・・・     mc1.onMouseUp = function(){       Trace("OK");     }     mc2.onMouseUp = function(){       Trace("OK");     }     mc3.onMouseUp = function(){       Trace("OK");     }     ・     ・×97回     ・ この様にmc●●と同じ数だけ100回同じような文を記述する方法しかないのでしょうか? 個人的には 『eval("_root.mc"+i)』を利用して同じような構文は削除したいのですが良い方法が思いつきません。 何か良い方法がありましたらご教授ください。 お願いします。

  • ムービークリップを削除したい

    FLASH 5 を使っています。 現在、duplicateMovieClip を使ってムービークリップを複製できるようにしています。 複製するMCの名前に連番を付けるようにして同じものを何個も複製できるようにしています。 別途、ゴミ箱を作り複製したMCをゴミ箱に乗せると削除できるようにしたいと考えています。 hitTest と removeMovieClip を使えば良さそうなのですがうまくいきません。 複製したMCが何個も出来るためゴミ箱基準だとMCの名前を指定できないので複製元のMCに onClipEvent (enterFrame) { if (this.hitTest( _root.gomi )) { this.removeMovieClip (); } } と書いてみたのですがダメでした。 なにぶん Actionscriptを始めたばかりで、良く分かりません。 お分かりの方、教えていただけますでしょうか? 宜しくお願い致します。

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

    たびたびすみません、追記いたします。 外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに座標を割り当て、画像を読み込ませ、さらにそのムービークリップのロールオーバー時に、あらかじめ作成しておいたテキストボックスに店名と簡単な店舗詳細を表示するというスクリプトを組みたいのですが、なかなかうまくいきません。使いどころとしては地図にそれらのムービークリップを配置し、そのランドマーク画像にロールオーバーしたら店舗詳細が現れるといったものを作りたいです。いろいろなサイトや本を参考にしながら下記スクリプトを作成致しましたが、うまくうごきません。たぶん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
  • AS1.0で基準点をそろえたい

    AS1.0でduplicateMovieClipを使った複製をした後MC同士の基準点をそろえたいのですがうまくできません 今MC1とMC2というムービークリップをduplicateMovieClipを使って複製しています まず針(MC1)というフレームがありその中に //関数が呼ばれたら描画する setInterval(hari,1000); function hari(){ i ++; duplicateMovieClip("Hari","hari" + i , i); } が書いてありこれは針が1秒ごとに描画されていくという方法です そして円(MC2)というフレームの中にも //関数が呼ばれたら描画する setInterval(EN,1000); function EN(){ i ++; duplicateMovieClip("En","en" + i , i); } がかいてありこれも複製できるようになっています 針(MC1)の中には onClipEvent (load) {       //針の位置をランダムで決めた後描画 this._x = Math.random() * 300 + 50; this._y = Math.random() * 200 + 50; } onClipEvent (enterFrame) {     //針回転     _rotation += 6; } がありこれをベースにして円(MC2)の基準点を針(MC1)にあわせて描画したいのですがやり方がわかりません 自分が考えた方法ですが onClipEvent (load) {       円1の位置x = 針1の位置x       円1の位置y = 針1の位置y } をやったんですがうまくいきません 誰か教えてください

専門家に質問してみよう