ASで降らせた雪のマスクの掛け方について

このQ&Aのポイント
  • ASを使用して降らせた雪をマスクする方法について教えてください
  • ASで降らせた雪をマスクする方法について詳しく調べたが思う結果が得られませんでした。
  • ASで降らせた雪のマスクについて、ご存知の方がいらっしゃいましたら教えてください
回答を見る
  • ベストアンサー

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

noname#158971
noname#158971
  • Flash
  • 回答数1
  • ありがとう数1

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

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

ムービークリップの中に雪を降らせて そのムービークリップにマスクをかければいいでしょう。 マスクにする星型のムービークリップに「star_mc」というインスタンス名を付けたとします。 そしてスクリプトの最初の部分 ---------------------------- width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth());  ~略~ ---------------------------- この部分を次のように変更します。 ---------------------------- width = 550; height = 400; total = 200; //例えば「sky_mc」というムービークリップを作成して _root.createEmptyMovieClip("sky_mc",0); //その「sky_mc」に「star_mc」のマスクをかけて _root.sky_mc.setMask(star_mc); for (var t = 0; t != total; t++) { //その「sky_mc」の中にsnowflakeを呼び出す var mc = _root.sky_mc.attachMovie("snowflake", "snowflake"+t, _root.sky_mc.getNextHighestDepth());  ~略~ ---------------------------- なお上記スクリプトでは 雪を降らせる「sky_mc」 をスクリプトで作成していますが スクリプトで作らず手でムービークリップを作成して そのムービークリップをステージの左上コーナーに手動で配置しても良いです。 (そのムービークリップの基準点がステージ左上のコーナーに来るように配置しても良いです。) 手動で配置した場合のメリットは「レイヤーを選ぶことができる」ということです。 雪の上に(雪の手前に)何かを描くことも 雪の下に(雪の背景に)何かを描くことも簡単にできます。

noname#158971
質問者

お礼

お早いご回答、誠にありがとうございます!!! 早速、ご教示いただいたスクリプトを 実践させていただきました(>_<) そして!、見事に、私が求めていた理想の結果を 得る事が出来ました!!!! 本当にありがとうございますm(_ _)m それに、スクリプトの説明まで入れた、 とても丁寧なご教示をいただいたお陰で、 スクリプトの意味も、とても分かり易く、 めちゃくちゃ勉強にもなりました! 重ねて、お礼申し上げます! いただいた回答は、そのままメモにコピーして、 これからも、しっかりと参考にさせていただこうと 思っています(〃 ̄ω ̄)ゞ この度は、本当に本当に!、ありがとうございました!!! 多大な感謝を込めて。。。。

関連するQ&A

  • 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
  • 雪の降るスクリプトで、、、

    以前雪の降るスクリプトについて質問させていただいたものです。 フレームには、 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_stage」の上だけにキラキラをランダムに発生させたいんです。 sw = mc_stage._width; sh = mc_stage._height; level = 1; this.onEnterFrame = function() { if (Math.random()*10>9) { level++; newname = "Fwks"+level; Fwks.duplicateMovieClip(newname, level); this[newname]._x = Math.random()*sw; this[newname]._y = Math.random()*sh; } if (level>8) { this.onEnterFrame = undifined; } }; この形だと、mc_stageの幅と高さを取得するだけで、座標を取得していません。なので、ステージの左上からmc_stageのwidthとheightの範囲できらきらが発生してしまいます。 どうしたらきちんとmc_stageの上だけでランダムに発生させれますか?ぜひおしえてください!

    • ベストアンサー
    • Flash
  • FLASH アクションスクリプト

    画面のサイズを拡大縮小しても 常にセンターに表示させる アクションスクリプトで質問がございます。 back_mcが【背景】 main_mcが【オブジェクト】 _root.main_mc._x = ( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = ( Stage.height - _root.main_mc._height) /2; このアクションスクリプトで【オブジェクト】が最初から常にセンター表示になる事は分かるのですが、例えば座標x600 y500で始まるようにするのはどうしたら良いのでしょうか。 下記のアクションスクリプトでは、【オブジェクト】がx600 y500の位置に最初はあるのですが画面のサイズを拡大縮小してもピクリとも動きません。 Stage.align = "TL"; Stage.scaleMode = "noScale"; Stage.addListener(this); this.onResize = function() { _root.main_mc._x = 600;( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = 500;( Stage.height - _root.main_mc._height) /2; _root.back_mc._width = Stage.width; _root.back_mc._height = Stage.height; } this.onResize(); いまいち分かりにくい質問ですが伝わりますでしょうか。 分かる方、宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 1フレームにActionを設定したときの止め方

    ただ今flash勉強中の初心者です。検索したり本を調べたりしても根本が理解できていないためか、解答策が見つからず困っています。 自分で作ったものではないのですが、1フレーム目にActionを書いています。動きとしては、テレビの砂嵐のような画面に、二種類の文字がランダムに出て、ラインもランダムに出てくるという感じです。以下のscriptだと永遠と続くのですが、5秒ぐらいランダムに文字とラインが出て、その後砂嵐の画面だけにして止めたいのですが、どうしたら良いかわかりません。 使用しているソフトはFlash8、MacOSX10.4です。 import flash.display.BitmapData; var tv_noise:BitmapData = new BitmapData(Stage.width,Sage.height,true); _root.attachBitmap(tv_noise,20); _root.attachMovie("text1","text_1",3); _root["text_1"].scale = 350; _root["text_1"].onEnterFrame = random_me; _root.attachMovie("text2","text_2",2); _root["text_2"].scale = 350; _root["text_2"].onEnterFrame = random_me; _root.attachMovie("line","line_1",1); _root["line_1"]._y = Stage.height/2; _root["line_1"]._alpha = 40; _root["line_1"].onEnterFrame = scale_me; function random_me():Void{ this._x = 10+Math.round(Math.random()*Stage.width); this._y = 10+Math.round(Math.random()*Stage.height); this._xscale = this._yscale = Math.round(Math.ramdom() *this.scale); this._alpha = 10+Math.round(Math.random()*100); } function scrach_me():Void{ this._x = 10+Math.round(Math.random()*Stage.width); tv_noise.noise(Math.round(Math.random()*100000),80,170,8,true); } 宜しくお願いします。

    • ベストアンサー
    • Flash
  • 再生スライダーと連続再生について。

    再生スライダーと連続再生について。 今、複数の外部swfをA.swfの置いたmcによんで 連続再生ができるものを作成しています。(01.swf<-02.swf) 再生スライダーも作ろうと、A.swfにseek_mcとbar_mcを使って設置しました。 つまみのseek_mcをドラッグしたり、動画と一緒に動いたりなどは出来たのですが、 終点までドラッグすると01.swfのはじめに戻ってしまします。 何もしなければ次のファイルをちゃんと再生してくれます。 いろいろ、入力して試してはいるのですが、まったく上手くいきません。 何かいい方法はないでしょうか?? よろしくお願いいたします。 flash8を使っています。 以下は、スライダーの置いてあるフレームに記入したASです。 また、01.swf02.swfに変更はできないので、 A.swfのフレームASを記入してgotoAnd...とenterframe にて連続再生ができるようにしてあります。 var left = this.bar_mc._x+this.seek_mc._width/2; var top = this.bar_mc._y; var right = left+this.bar_mc._width-this.seek_mc._width; var bottom = this.bar_mc._y; this.seek_mc._x = this.bar_mc._x; this.seek_mc._y = this.bar_mc._y; this.seek_mc.onPress = function() { _root.stop(); delete _root.onEnterFrame; this.startDrag(false, _root.left, _root.top, _root.right, _root.bottom); this.onMouseMove = MoveFrame; }; this.seek_mc.onRelease = function() { this.stopDrag();  var p = (this._x-_root.bar_mc._x)/(_root.bar_mc._width-this._width); _root.gamen_mc.gotoAndPlay(Math.floor(_root.gamen_mc._totalframes*p)); _root.onEnterFrame = _root.MoveSeek; delete this.onMouseMove; }; function MoveFrame() { var p = (this._x-_root.bar_mc._x)/(this.bar_mc._width-this._width); _root.gamen_mc.gotoAndStop(Math.floor(_root.gamen_mc._totalframes*p)); } function MoveSeek() { var p = _root.gamen_mc._currentframe/_root.gamen_mc._totalframes; this.seek_mc._x = _root.left+(this.bar_mc._width-this.seek_mc._width)*p; } _root.onEnterFrame = MoveSeek;

    • ベストアンサー
    • 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
  • AS3.0に書き換えたいです

    みなさま始めまして、最近AS3.0を始めたばかりでして 右も左もわからない者です。 以前に、AS2.0でインスタンスを右方向にランダム移動させる プログラム(右上方向にいったり右下方向にいったり)を作っていたのですが、 AS3.0で使いまわそうと思ったところ、エラーになってしまい、 作業が止まってしまいました。 参考書などは買っていますが、覚えるのにかなり時間がかかりそうなので、 とりあえず今急いで教えてもらいたく質問させてもらいました。 よろしくお願い致します。 AS2.0で書いたスクリプトです これをAS3.0用に書き換えたいです this.onEnterFrame = function() {   _y -= Math.floor(Math.random()*3)-1;   _x -= Math.floor(Math.random()*5)-3; }; 本当に初歩的な質問でご迷惑おかけしますが、よろしくお願い致します。

    • ベストアンサー
    • Flash
  • ボタンをロールオーバーした時に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