ボタンをロールオーバーした時にMCを複製したい

このQ&Aのポイント
  • ボタンをロールオーバーした時にMCを複製する方法について教えてください。花火が噴射されるような効果を表現したいです。
  • フレーム1のスクリプトでボタンをクリックすると、指定したMCが複製されます。さらに、複製されたMCは画面上を移動し、ある位置に到達すると消えるようになっています。
  • 解決策を急いで必要としており、助けてほしいです。
回答を見る
  • ベストアンサー

ボタンをロールオーバーした時にMCを複製したい

はじめまして、よろしくお願いします。 表題の通りですが、 ボタンをロールオーバーした時にMCを複製したいのですが、やり方がわかりません。 body(←ボタン名)を押した時に snow(←複製されるMC名)を噴射するような形にしたいです。 フレーム1に書かれたスクリプト------------------- for (count = 1;count<30;count ++) { snow.duplicateMovieClip("snow" + count , count ); } ----------------------------------------------- 複製されるMC(snow)---------------------------------- onClipEvent(load){ xposition = _root.body._x+75; yposition = _root.body._y+75; scale = Math.random()*30+10; speedx = 12-(scale+Math.random()*30+1)/5; speedy = 12-scale/5; this._x = xposition; this._y = yposition; this._xscale = scale; this._yscale = scale; } onClipEvent (enterFrame){ if(this._y>400){ this._y=yposition; this._x=_root.body._x+75; this._alpha = 100; } this._x+=speedx; this._y+=speedy; this._alpha = this._alpha-5; } ----------------------------------------------- 早急に解決しなくてはならなく、困っています。 よろしくお願いします。

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

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

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

#1です。 クリック時ではなくてロールオーバー時でしたね。失礼しました。 ロールアウトで消すのでしたら, たとえば次のようにするとかが1つの方法です。 ----------------------------------- body.onRollOver = function() { for (count=1; count<30; count++) { snow.duplicateMovieClip("snow"+count, count); } }; body.onRollOut = body.onDragOut = function() { for (count=1; count<30; count++) { removeMovieClip("snow" + count); } }; ----------------------------------- または ----------------------------------- body.onRollOver = function() { for (count=1; count<30; count++) { snow.duplicateMovieClip("snow"+count, count); } }; body.onRollOut = body.onDragOut = function() { for (count=1; count<30; count++) { _root["snow" + count].removeMovieClip(); } }; ----------------------------------- Google 検索「配列アクセス演算子」 http://www.google.co.jp/search?hl=ja&source=hp&q=%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

piyo1983
質問者

お礼

教えていただいたもので無事再現できました。 ありがとうございました。 この件以外でも試行錯誤の部分があるので、 もしまた質問することがありましたらよろしくお願いします。 大変ありがとうございました。

その他の回答 (1)

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

早急ということで手短に。 単にフレームに書くスクリプトを次のようにすれば良いのではないでしょうか? // body というインスタンス名のボタンをクリックしたとき body.onRelease = function() { for (count=1; count<30; count++) { snow.duplicateMovieClip("snow"+count, count); } }; ※ Flash Player 6 以上用の SWF をパブリッシュ   ActionScript 1.0

piyo1983
質問者

補足

お返事ありがとうございます。 早速試してみたところ、問題なく動きました…が、 すみません、もう一つ教えてください。 ロールアウトした時に、複製をとめる、とういか、 複製しているmc自体を削除、または見えなくするにはどうしたらいいですか? 教えていただいたソースを元に下記のとおり試してみたのですが、動作しません。 フラッシュのスクリプトに慣れていないので変な書き方になっているかもしれませんが… よろしくお願いします。 フレーム1--------------------------------- body.onRollOver = function() { for (count=1; count<30; count++) { snow.duplicateMovieClip("snow"+count, count); } } body.onRollOut = function() { for( i=1;i<30;i++){ var s = "snow" + String(i); s.removeMovieClip(); } } -------------------------------------------------

関連するQ&A

  • scriptを使いまわしたい。

    見よう見まねで下記のようなスクリプトを記述しています。 複数のムービークリップに設定していますが、編集するのにかなり手間がかかります。うまく使いまわす方法はございませんでしょうか…。 また、記述の仕方にも問題等ありましたらご指南ください。。 onClipEvent (load) {  sx_move = Math.floor(Math.random() * -10) - 3;  sy_move = Math.floor(Math.random() * 6) - 3;  s_scale = Math.floor(Math.random() * 40) + 40;  _xscale = (s_scale);  _yscale = (s_scale);  n = 1; } onClipEvent (enterFrame) {  _x += (sx_move);  _y += (sy_move); } on (rollOver) {  mx.behaviors.DepthControl.bringToFront(_root);  this.onEnterFrame = function () {   n += 1;   _x -= (sx_move);   _y -= (sy_move);   if (n < 20) {    _x = (_x + 25) / 1.5;    _y = (_y + 12) / 1.5;    _xscale = (_xscale + 50) / 1.5;    _yscale = (_yscale + 50) / 1.5;   } else if (n < 40) {    stop();   } else if (n < 50) {    _x += 13;    _y += 13;    _alpha -= 20;    _xscale = (_xscale) / 1.2;    _yscale = (_yscale) / 1.2;   } else {    stop();   }  }; }

    • ベストアンサー
    • Flash
  • attachMovieで表示した複数のMCが一瞬ずつしか表示されません

    attachMovieでMCを複数表示しているのですが、 ランダムに表示したMCが一瞬ずつしか表示されません。 やりたいことは、aaaというMCが横位置と大きさがランダムで表示され、 下にまっすぐ落ちるという動きです。 こちらの記事を参考に作成しました。 http://oshiete1.goo.ne.jp/qa2500105.html -------------------------------------- // 深度の初期値を設定 var dep = 0; // 大きくなる限度を設定 var mag = 80; _root.dep++; _root.attachMovie("aaa", "myMC"+_root.dep, _root.dep); //座標を指定 _root["myMC"+_root.dep]._x = Math.random()*Stage.width; //下に落ちていく _root["myMC"+_root.dep]._y += 10; // 大きさを指定 var my_scale = Math.random()*_root.mag; _root["myMC"+_root.dep]._xscale = my_scale; _root["myMC"+_root.dep]._yscale = my_scale; -------------------------------------- ランダムに表示はできるのですが、すばやく消えて、すぐに次のMCが 表示されてしまいます。 同じ深度に表示されているように見えますが、 _root.dep++; で 深度は変わっているはずなんですが…。 ちなみに stop(); を入れたらひとつだけ表示されましたが 下に落ちていきませんでした…。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ASで降らせた雪のマスクの掛け方について。

    下記のサイトのASを使用させていただき、雪の降るFlashを作成したのですが、 参照サイト : http://www.webdesignlibrary.jp/2006/06/flash_snow.php このスクリプトで降らせた雪を、例えば星型の図形をマスクにして、 その範囲内で雪が降るようにしたいと思い、 色々と丸一日掛けて調べたのですが、全く上手く行きません。 とりあえず、色々と調べてみた結果、 【 xxx.setMask 】 を使えば良いのだろうか・・?、、、と言う所までは 行き着いたのですが、スクリプトを、どう改造?してみても、全く思う結果が得られません。 【 _root.setMask 】 で、ステージ全体を、目的の図形MCでマスクする事で、 思う結果に近しいカタチは出来たのですが、_root.setMask でステージをマスクしてしまうと、 例えば、マスク外に何か画像処理を施したくても、マスク外の画像は全て消えてしまいますし、 その画像の大きさ込みでマスクを作成すると、その画像の上にも雪が降ってしまうので、 完全に行き詰ってしまっています。 ASで降らせた雪だけをマスクする方法はありますでしょうか? どなたか、ご存知の方がいらっしゃいましたらば、 是非にご教示願えますと、大変ありがたいです。  何卒よろしくお願い申し上げますm(_ _)m 以下、使用AS ------------------------------------------------ width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth()); mc._x = (Math.random()*(width+20))-10; mc._y = (Math.random()*(height+20))-10; mc.yspeed = (Math.random()*1.75)+0.25; mc.speed = (Math.random()*3)+2; mc._xscale = mc._yscale=(mc.speed+mc.yspeed)*10; mc.onEnterFrame = function() { var angle = Math.atan2(_root._xmouse-(width/2), _root._ymouse)+1.5707963267949; this._y += Math.sin(angle)*this.speed+this.yspeed; this._x += Math.cos(angle)*this.speed; if (this._x>width+10) { this._x = -10; } else if (this._x<0-10) { this._x = width+10; } if (this._y>height+10) { this._y = -10; } else if (this._y<0-10) { this._y = height+10; } }; } ------------------------------------------------ 【 AS使用環境 】 Adobe Flash CS3, アクションスクリプト2.0

    • ベストアンサー
    • Flash
  • 雪の降るスクリプトで、、、

    以前雪の降るスクリプトについて質問させていただいたものです。 フレームには、 for (k=0; k<50; k++) { duplicateMovieClip(this.snow, "snow"+k, k); } で、ムービークリップには、 onClipEvent (load) { //specifies the size of the movie stage movieWidth = 300; movieHeight = 200; //variables that will modify the falling snow i = 1+Math.random()*2; k = -Math.PI+Math.random()*Math.PI; //giving each snowflake unique characteristics this._xscale = this._yscale=50+Math.random()*100; this._alpha = 75+Math.random()*100; this._x = -10+Math.random()*movieWidth; this._y = -10+Math.random()*movieHeight; } onClipEvent (enterFrame) { //putting it all together rad += (k/180)*Math.PI; this._x -= Math.cos(rad); this._y += i; if (this._y>=movieHeight) { this._y = -5; } if ((this._x>=movieWidth) || (this._x<=0)) { this._x = -10+Math.random()*movieWidth; this._y = -5; } } これを再生するといきなりステージに現れてしますのですが、 ステージの上からY座標Oから(上から降るように)するにはどう したらよいでしょうか? onClipEvent (load)に this._y = 0; と付け加えてみましたが駄目でした。 ご教授お願いいたします。

    • ベストアンサー
    • Flash
  • 雪が降るスクリプトについて

    雪がふるスクリプトを http://www.kirupa.com/developer/mx/snow.htm で拾ったのですが、flashplayer6対応のようで、 これをflashplayer7対応にするにはどうしたらよいのでしょうか? フレームには、 for (k=0; k<50; k++) { duplicateMovieClip(this.snow, "snow"+k, k); } で、ムービークリップには、 onClipEvent (load) { //specifies the size of the movie stage movieWidth = 300; movieHeight = 200; //variables that will modify the falling snow i = 1+Math.random()*2; k = -Math.PI+Math.random()*Math.PI; //giving each snowflake unique characteristics this._xscale = this._yscale=50+Math.random()*100; this._alpha = 75+Math.random()*100; this._x = -10+Math.random()*movieWidth; this._y = -10+Math.random()*movieHeight; } onClipEvent (enterFrame) { //putting it all together rad += (k/180)*Math.PI; this._x -= Math.cos(rad); this._y += i; if (this._y>=movieHeight) { this._y = -5; } if ((this._x>=movieWidth) || (this._x<=0)) { this._x = -10+Math.random()*movieWidth; this._y = -5; } } とあるようですが。

    • ベストアンサー
    • Flash
  • 複製したMCを指定した座標へ配置したいのですが

    こんにちは。 初歩的な質問で申し訳ないのですがよろしくお願いします。 attachMoiveでライブラリ内のMCを数十個複製しそれらをステージ内に 配置する際、4x4、6x6といったように均等に数十個配置する事は 出来るのですが均等に配置するのではなく自分の指定した座標に 1つ1つ配置したいのです。 色々調べましたら、自分の配置したい各場所の各座標(x,y)を 配列を使い変数にするのだと思い、自分なりに作ってみましたところ 1つは指定した座標に配置出来たのですが2つ目以降が上手く 配置出来ません。 var i; var num=50; //複製するmcの数 var pos = {x:50, y:100}; //1つ目の指定座標。              //ここで残り49個のmcの座標も指定。 for (i=0; i<num; i++) { _root.attachMovie("mc", "mc"+i, i); var mc_obj = eval("_root.mc"+i); mc_obj._x = pos._x; mc_obj._y = pos._y; } 一応頭の中ではこういうスクリプトを考えてますが多分間違いが あり何かが足りないのだと思います。 var posのところで2つ目以降の座標の指定の仕方と forの中でmc_obj._xとmc_obj._yにどのように50個分指定した 座標へ配置設定をしてやるのかお分かりくださる方がいらっしゃれば ご教授くださいますようよろしくお願いします。

    • ベストアンサー
    • Flash
  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

  • AS2 ランダムに出現する煙

    初めて質問させてもらいます。 FLASHのActionScriptで画面下から画面上へ昇っていく煙をランダムに出現させるASを作成したのですが、動き的には満足しているのですが開始時に画面に一気に煙がですぎになります。 煙のない状態から始めるには何を付け加えればいいのかわかりません。 どなたかご教授願えるかたお願いいたします。 環境 FLASH cs3.AS2にて製作 ソース ・タイムライン ----------------------------------------------- for (var i = 0; i<10; i++) { snow.duplicateMovieClip("snow"+i, i); } ----------------------------------------------- ・mc ----------------------------------------------- onClipEvent (load) { sw = Stage.width; sh = Stage.height; th = this._height; this._x = Math.random()*sw; this._y = Math.random()*sh; speed = Math.random()*4+1; flick = Math.random()*4+1; rotate = Math.random()*1; } onClipEvent (enterFrame) { this._y -= speed; this._x -= flick; this._rotation +=rotate; if (this._y<-869.8) { this._y = 1400; } if (this._x>sw+th || this._x<-th) { this._x = Math.random()*sw; this._y = -th; } } ----------------------------------------------- よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • atttachmovie で配置エリアの限定

    actionscript 初心者です。 for文の中で var x:Number = Math.floor(Math.random()*1000)-500; var y:Number = Math.floor(Math.random()*650)-325; _root.space.attachMovie("btn_mc1", "btn_mc"+i,0-i, init); _root.["btn_mc"+i]._x = x; _root.["btn_mc"+i]._y = y; というスクリプトで、btn_mcというmcをランダムに配置しています。 (このスクリプト、間違っているかもです。すみません) 配置位置は今1000px×650pxのステージ中でランダムになっているのですが これを、このステージいっぱいの楕円形があると仮定して その中にだけ、配置するということをスクリプトでできるでしょうか?? つまり、mcがぼんやりと楕円形に集まっている。。というような状態に したいのです。 楕円のマスクをかける、という方法ですと、mcが欠けてしまい、 見栄えがよろしくないです。。 よろしければ、お教えいただけると、幸いです。 お願いいたします m(__)m

    • ベストアンサー
    • Flash
  • 動きを伴うフェードインフェードアウトするmcをボタンで制御したい

    4つ前の質問と類似するのですが、四角形のムービークリップを透明度0から100になりつつ移動させたいと思っています。 単純に制御だけするなら onClipEvent (load) { function move() { dx = 10; // x方向の移動量 dy = 0; // y方向の移動量 time = 0; // 時間カウント用 } } onClipEvent (enterFrame) { function move2(){ // 毎フレームごとに移動量を増やしていく dx *= 0.9; dy *= 0.9; // 毎フレームごとに移動量を座標に足しこむ _x += dx; _y += dy; } } で動作したのですが、ボタンを押した時にはじめてこの動きを出したいと思っています。 そこで onClipEvent (load) { function move() { dx = 10; dy = 0; _alpha = 0; time = 0; } } onClipEvent (enterFrame) { function move2(){ dx *= 0.9; dy *= 0.9; _alpha += 5; _x += dx; _y += dy; } } と書いて、ボタンには on(release){ this.player.move(); this.player.move2(); } と書いたところ、それぞれの動きが別になってしまいました。 また、他のボタンを押したときはこれと逆に消えていく動きのあとにこれと同じ動きで四角形が出て来てもらいたいのですがどのようにしたらよろしいでしょうか?どなたかおわかりになる方教えていただきたいです。宜しくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう