MCを複数させると・・・

このQ&Aのポイント
  • Macromedia Flash MX2004を使用してビーズアクセサリーを自分でデザインするFlashを作成しています。
  • ドラッグした数だけビーズMCが複数出てきて、組み合わせてアクセサリーを作ることができます。
  • しかし、出しすぎたビーズMCの削除と吸着させる方法が分かりません。困っています。
回答を見る
  • ベストアンサー

MCを複数させると・・・

Macromedia Flash MX2004を使用しています。 ActionScriptはまったくの初心者です; ビーズアクセサリーを自分でデザインするFlashを作ろうとしています。 ある領域に元々用意されているビーズのMCをドラッグしていくと、ビーズMCがその領域からドラッグした数だけMCが複数出てきます。 複数出てきたビーズMCを組み合わせてアクセサリーが出来ていくというものです。 今できているのはこちら↓ http://ribbon.chu.jp/flash/bi_zu.html 説明が難しいので、↑からDLして見ていただいてかまいません; 今、出しすぎてしまったビーズMCをゴミ箱に入れると削除される というのをやっているのですが、ActionScriptの記述の仕方がわかりません。 とりあえずMCをゴミ箱MCに入れると削除するやり方は分かるのでコピペしてやってみたのですが、 私が作っているFlashは、 Num++ [mc+Num] みたいにどんどん同じMCが複製されていくせいか、ゴミ箱MCに触れさせても正常に動作してくれません; もう一つ、MCを吸着するようにしたいのですが、これもやり方は分かるのですが複数MCが生成されるFlashなのでどのように記述すれば複数のMCを複数の別のMCに吸着させることができるのでしょうか?; 分かりにくい文章ですみません・・・ 本当に困っているので何かちょっとしたことでも分かる方いましたら教えてください。

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

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

  • ベストアンサー
回答No.1

すみませんがソースは見てません。 生成と削除は以下のようなソースで可能だと思いますが いかがですか? (FLASH環境が手元にないので動作確認はしていません) 生成 Num = 0; //ビーズ(beadsMC)の複製を作成 _root.duplicateMovieClip(beadsMC,"beadsMC"+Num,Num); Num++; 削除 for( var i=0 ; i < Num ; i++ ){ //ゴミ箱(gomiMC)とビーズ(beadsMC0~)との衝突判定 if( gomiMC.hitTest( this[ "beadsMC" + i ] ) == true ){ //衝突時は削除 this[ "beadsMC" + i ].removeMovieclip(); Num--; } }

miyu618
質問者

お礼

ありがとうございます^^ 複製するMCの親はボタンだったので、 on (release) {   if (this.hitTest(_root.gomi)) {   this.removeMovieClip(); } } でいけました; やり方はいろいろあるようなので初心者の私にとったらとても参考になりました^^

関連するQ&A

  • MCを一定の間隔で吸着させたい?のですが

    MC四角形が,ドラッグすることで,左右に動くようにしました。左右に動くときに一定の間隔で「止まる」というか「吸着する」ように設定するには,どのようなスクリプトが考えられるでしょうか。 動きとしては,複数の縦線のある表をその線上に来るたびに吸着する(止まる)感じにしたいのです。 環境 (XP,Flash8 初心者です。)

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

    毎度すみません。 複数のムービークリップ(以下MC)をステージに時間差でバラバラの位置に登場させたいのですが、最初で行き詰まってしまいましたのでご質問させてください。 5個のMC(1~5)をステージに配置し、インスタンス名をmc1~mc5で振っています。 スクリプトレイヤーに以下の様に記述しています。 ------------ for(i=1;i<5;i++){ var mc = this["mc"+i]; mc.num = i; } mc.num._visible = false; mc.num._alpha = 0; //MCを時間差で任意の位置に表示 var t=0; this.onEnterFrame = function(){ t++; if(t==25){ mc1._visible = true; mc1.onEnterFrame = function(){ this._y = 50; } } if(t==50){ mc2._visible = true; mc2.onEnterFrame = function(){ this._y = 100; } } if(t==75){ mc3._visible = true; mc3.onEnterFrame = function(){ this._y = 150; } } //以降、mc4、mc5は省略 } --------- --------- mc.num._visible = false; mc.num._alpha = 0; --------- の部分で、デフォルト時はmc1~5を非表示にしているつもりが、 最初から表示されてしまいます。 初心者なので、近いフラッシュを見よう見真似で作成しています。 根本的に記述法を間違えておりましたら、恐れ入りますがご指摘ください。 またもっと効率的な方法がありましたら、ご教授いただければ幸いです。 Flash8.0、ActionScript2.0で制作しています。

    • ベストアンサー
    • Flash
  • 【AS3】指定範囲内でマウスから逃げるMC

    現在Flashサイトを製作中の者です。 ActionScript3.0についてご教授ください。 私のレベル:Flashを始めたばかりの初心者です。 使用環境:AdobeFlashCS5、ActionScript3.0 やりたいこと:マウスから逃げる個体MCを作りたい。 例1:マウスから逃げる動き(ttp://por.s54.xrea.com/lab/147/) 例2:沢山のドットがマウスを避ける動き(ttp://wonderfl.net/c/8vSO/) 自分で調べてみて上のようなサイトにたどり着きました。 厳密な伝え方が難しいですが、イメージとしては例1が近いかもしれません。 ・複数ではなく、個体MCで表現したい ・MCはステージ上に予め指定した範囲の外には出ていかない ・開始位置を指定したい こうした動きの場合、どのように記述すると良いのでしょうか。 こうした内容の本か、コードやサンプルがあるサイトを ご存知でしたらお知恵をいただけないでしょうか。 宜しくお願い致します。

  • 複数のmcに同じイベントを記述したら、1つしか反応しない

    うまくいかない原因がわからず困っています。 画面上の複数のmcに同じイベントを記述しました。 内容はシンプルで、「mc01にマウスがのったらフレームf01に移動する、 マウスが離れたらフレームstartに戻る」というものです。 mc02はf02へ、mc03はf03へ移動というふうにします。 これをmc01からmc07まで順番に書いていったところ mc07は反応するのですが、あとの6つが反応しません。 mc07の記述を消すとmc06が反応するようになり、 どうやら一番最後に記述している部分しか反応しないようです。 これ↓がそれぞれのmcに書いてるASです。 ---------------------------------------------------------- onClipEvent (enterFrame) { if (_root.mc01.hitTest(_root._xmouse,_root._ymouse,1)) { _root.gotoAndPlay("f01"); } else { _root.gotoAndPlay("start"); } } ---------------------------------------------------------- ちなみにFlash8使用、プレイヤー8でパブリッシュしてます。 どうぞよろしくお願いします。

    • ベストアンサー
    • Flash
  • 複数のMC(ドラッグで移動可能)から等しい距離にMCを配置したい

    ドラッグで移動可能な複数のムービークリップから等しい距離の位置にムービークリップを配置したいです。 以下『複数』が3つの場合を例にします。 MC4はMC1、MC2、MC3がドラッグで移動されると、MC1、MC2、MC3への距離が等しい位置(厳密に等しくなくても良い)に移動させたいです。(結果、MC4はMC1、MC2、MC3を三角形とした際の重心点上に配置される) オーサリングツールは『ParaFla!』ActionSctiptは1.0相応で以下の様に作ってみましたが、いつまで経っても落ち着かないので改善したいです。 ※スクリプトのスペースは全角で記述。 ■MC1、MC2、MC3 _root上にMC1を深度0、[固定]で配置。 _root上にMC2を深度1、[固定]で配置。 _root上にMC3を深度2、[固定]で配置。 MC1,MC2,MC3にテキストで●を配置。 MC1,MC2,MC3に以下スクリプトを記述。 on (press){  this.startDrag(); // ドラッグを開始する } - on (release, releaseOutside){  this.stopDrag (); // ドラッグを解除する } ■MC4 _root上にMC4を深度3に配置。 MC4にテキストで○を配置し、以下スクリプトを記述。 onClipEvent (enterFrame){  long=0;  short=0;  for(i=1;i<=3;i++){   mc=eval('_root.MC'+i);   length=Math.sqrt((mc._x-_x)*(mc._x-_x)+(mc._y-_y)*(mc._y-_y));   if(long<=length){    long=length;    long_mc=mc;   }   if(short>=length||short==0){    short=length;    short_mc=mc;   }  }  _x += ((long_mc._x+short_mc._x)/2 - _x)/5;  _y += ((long_mc._y+short_mc._y)/2 - _y)/5; } 上記のようにして作成したものを以下に置きます。 http://carken.web.fc2.com/osiete/test3.html 動かしてみると、いつまでたっても、細かく動いて止まってくれません。 厳密に同じ距離でなくても良く、ある程度見た目にOKかなってところで止まるようにしたいです。 アドバイスありましたら、よろしくお願いいたします。 参考 『2つのMC(ドラッグで移動可能)から等しい距離にMCを配置したい』(http://oshiete1.goo.ne.jp/qa4328262.html)

    • ベストアンサー
    • Flash
  • ScrollPaneからmcをドラッグして外に出したい

    たとえば50個のmcから好きな5つを選んで、順番に決められた場所へドロップできる swfムービーを製作しています。 50個のmcはswfムービーの領域には並べ切れなかったので、ScrollPane内に 並べようと考えました。Flashのライブラリウィンドウからステージ上に インスタンスをドロップできるのと似たインターフェイスです。 左側50%に“ドロップ領域”右側50%に“ScrollPane”を配置しました。 Flash MX 2004 Pro 環境で、_rootにScrollPaneを配置。縦方向にスクロールさせます。 そのcontentPathに設定したmc上に、50個のmc(obj_mc)をattachMovie()しました。  this.content.attachMovie("obj_mc",objName,objDepth); このobj_mcをドラッグし、左側の“ドロップ領域”(ScrollPaneの外)にドロップ したいので、obj_mcでstartDrag()を呼び出します。 しかしScrollPaneの外へドラッグしていくと、obj_mcはScrollPaneの“裏側”に 入ってしまい「ScrollPaneの外へ出す」ことは出来ません。 たとえばswapDepth(_root.getNextHighestDepth())しても、上には出ません。 これを回避して、外に出す為の考え方を、どなたか教えてもらえませんでしょうか? obj_mcのonPress時に、ScrollPaneから“切り離す”ことが出来ればよいのでは ないかとは思っているのですが…。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FlashのMCに複数の動作をつけるためには

    ムービークリップに スクリプト(以下(1)(2))をつけたいのですが、 そのスクリプトを別々(フレームやムービークリップ)に設定しているためか、 思うような動きを出すことができません。 同じフレームにスクリプトを書くことができれば 解決できると思うのですがそれができなくて・・・。 私の考えるイメージは以下の通りです・・・。 (1)フレーム上に赤の四角□(R_mc1、R_mc2)と白の四角□(W_mc1、W_mc2)のムービークリップ(MC)があります。 (2)赤のMCはドラッグすることができ、ドラッグしたMCは他のMCに重なると常に上に表示される。 (3)ドラッグした赤のMCが白のMCにヒットすれば(重なれば)、赤から黄へと色が変わる。  (そのために、赤のMC内のタイムラインには、フレーム1に赤、フレーム2に白、フレーム3に黄色の四角□を置いて、ヒットすればMC内のフレーム3にいくようにする。) (4)赤の四角□をドラッグせずにクリックだけをした場合は、MC内のフレーム2に行き、赤から白に色が変わる。 (5)リセットボタンをクリックすると、赤や黄のMCが元の位置に戻る。(最初のMCに戻る) 環境は、Flash Professional CS5.5 Action Script 2.0   Flash Player10 です。 以下はフレームに書いたスクリプト(1)です。 //--------------------------- //深度カウント用変数を用意 var dep_cnt:Number = 1; //変数 i に 1~2を入れながらループ for (var i:Number = 1; i<=2; i++) { //★「R_mc○」内の再生を停止 this["R_mc"+i].stop(); //★「R_mc○」内の変数 target_mc に「W_mc○」の参照を代入 this["R_mc"+i].target_mc = this["W_mc"+i]; //「R_mc○」押下時に関数 dragMC を実行 this["R_mc"+i].onPress = dragMC; //「R_mc○」を放した時に関数 dropMC を実行 this["R_mc"+i].onRelease = dropMC; //「R_mc○」をMC外で放した時にも関数 dropMC を実行 this["R_mc"+i].onReleaseOutside = dropMC; } //関数 dragMC の定義 function dragMC():Void { //深度カウント用変数をカウントアップ dep_cnt++; //押下されたMCをその深度に移動 this.swapDepths(dep_cnt); //押下されたMCのドラッグを開始 this.startDrag(); //★マウスが動く度に関数 watchHitW_mc を実行 this.onMouseMove = watchHitW_mc; } //関数 dropMC の定義 function dropMC():Void { //放されたMCのドラッグを終了 this.stopDrag(); //★マウスが動く度に関数 watchHitW_mc を実行するのを解除 delete this.onMouseMove; } //★関数 watchHitW_mc の定義 function watchHitW_mc():Void { //★ドラッグ中のMCがそのMC内の変数 target_mc に // 代入したMCとヒットしていれば if (this.hitTest(this.target_mc)) { //★ドラッグ中のMC内をフレーム3で停止 this.gotoAndStop(3); } else { //★それ以外はドラッグ中のMC内をフレーム1で停止 this.gotoAndStop(1); } } //--------------------------- 以下はR_mc1とR_mc2自体に書いたスクリプト(2)です。  R_mcをクリックしたときに白色になるようにR_mc 内のフレーム2(白い四角□)に行くようにしてあります。 (本当は、上記に示したフレームに書くスクリプト(1)に加えて書かなければいけないのだと思うのですが、その書き方がわからないので、R_mc自体に書いています。) //--------------------------- on (release) { this.gotoAndPlay(2); } //--------------------------- 以上のようなスクリプト(1)(2)にすると、赤のMC(R_mc1、R_mc2)をドラッグすると、スクリプト(1)ではなく、スクリプト(2)が優先されて、赤から黄にしたいのに、白に変わってしまうのです。 上記の私の考えるイメージ(1)~(5)が実行できるようなフレームに書くスクリプトを教えてください。 どうぞよろしくお願いいたします。 補足 リセットボタンには以下のスクリプトを書いてあります。    リセットボタンは同じフレーム内にスクリプトを書かずに、リセットボタン自体に書いてもかまいません。 //------------------ on (release) { //変数 i に 1~2を入れながらループ for (i=1; i<=2; i++) { //「R_mc○」を削除 this["R_mc"+i].removeMovieClip(); } gotoAndStop(1); gotoAndStop(2); } //------------------

    • ベストアンサー
    • Flash
  • Flashの画面をJPEG画像にしてメールフォームで送信したい

    この前も質問させていただきましたが、また別のところでつまづいてしまったので質問させてください。 学校の制作で、「Flashで携帯ストラップを作ろう」というテーマでFlashを作っています。 1.ユーザーが好きなパーツをドラッグして好きな携帯ストラップを作る。 2.「完成」ボタンを押すとFlashで作った携帯ストラップが画像化されてメールフォームに送られて住所などを入力して注文。 という流れです。 制作環境はWindowsXP・Flash8です。 今の時点でできているのはこちら↓ http://ribbon.chu.jp/flash/snapshot/snapshot.html 自分で好きなパーツを組み合わせて携帯ストラップを作り、 「SNAP」というボタンを押すと画像化されます。 その後メールフォームで送信という形にしたいです。 もしソースが見たいという場合は、ソースファイルをDLしてみていただいてもかまいません; ↑で「SNAP」というボタンを押していただいたら分かると思うんですが、 ストラップの紐の部分は写るんですが、肝心なパーツが写り込まなくてつまづいています。 ちなみに、 ●ムービークリップMASK_MCに画像化したい部分にマスクをかける。 ●MASK_MCをステージに配置。 ●MASK_MCのインスタンス名は「mc_ss」。 ●別に用意したボタンを押すとPHPと連携してでmc_ssの範囲のみを画像化したのをブラウザに表示。 という形になっています。 そのMASK_MCの中のマスク下にあるものは全て写り込むのですが、 携帯ストラップのパーツにどんどん複製していくActionScriptを記述しているのでMASK_MCの中にそれを持ってくるとActionScriptが正常に動作しませんでした; 【参考にしたサイト】 http://www.flash-jp.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=5191&forum=7 http://playon.jp/mm/paint/ http://qurage.net/labo/fla8/snapshot.html http://app.fudemame.net/nenga2009/design/photo_wafu.html XMLでFlashの画面を画像化して…という話しを聞いたのですが、ネットで調べても本屋さんで調べても結局何がなんだか分かりませんでした…。(ちなみにActionScriptもPHPもプログラミングは初心者です;) Flashでもメールフォームが作れるそうですが、文字(名前とかメアドとか住所とか)を送信するサンプルは見たことあるのですがFlashの画面自体をメールフォームで送信するやり方は見たことがなくどうしていいかわからない状態です; 説明が下手ですみません。。。 期限がすぐせまっていて困っています。 みなさんのお力を貸してください;

    • ベストアンサー
    • Flash
  • ムービークリップを削除したい

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

    • ベストアンサー
    • Flash
  • 変数の参照方法

    MCが複数あって、共通で使用したい変数があるのですが、 それぞれのMCにActionScriptを書くときに、その変数をどのように参照すればよいのかわかりません。 現在は、MCそれぞれにわざわざ記述しています。 1箇所にまとめる方法はありませんか? (当方ActionScriptを始めて、まだ1ヶ月ほどです)

    • ベストアンサー
    • Flash

専門家に質問してみよう