• 締切済み

MCを最背面に表示したい+ムービーの方向・速さを変えたい

こんばんは。 FLASHアクションスクリプトで、以下のスクリプトを利用して、 背景にものが動いているムービーを作りたいと思っております。 ↓ライブラリにあるMCをコピーする http://hakuhin.hp.infoseek.co.jp/main/as/movieclip.html#MOVIECLIP_07 こちらのスクリプトは問題なく動作したのですが、 スクリプトの内容が把握できず、困っております。 3つのご質問がございます。 (1)質問1 シーン1の上部レイヤーに違うオブジェクトを配置しており、 その下のレイヤーに上記のMCを配置しているのですが、 再生すると上記MCの方が上レイヤーのオブジェクトより前に表示されてしまいます。 このMCを最背面に表示させたいと考えております。 (2)質問2 MCの動きをもうちょっと早くしたいと思っております。 (3)質問3 上記サンプルMCでは、左から右へ移動しているのですが、 これを、下から上へ移動させたいと考えております。 スクリプトのどの部分で操作するのか教えていただける方いらっしゃいますでしょうか? 以下、作業環境です。 ----------------------------- WinXP FLASH8 ----------------------------- どうか、よろしくお願い致します。

みんなの回答

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

> (1)質問1 > このMCを最背面に表示させたい 最下レイヤーのステージ左上のコーナー 座標(0,0) に空のムービークリップを作成&配置し, インスタンス名を付けて, その最下レイヤーのムービークリップ内に attachMovie すれば良いと思います。 > (2)質問2 > MCの動きをもうちょっと早くしたいと思っております。 フレームレートを上げるか,もしくは, eval("_root.meme"+i).dx = Math.random()*1+1; の数値を大きくすればもっとスピードは早くなります。 > (3)質問3 > これを、下から上へ移動させたい attachMovie したムービークリップの初期座標を, ステージ左横ではなく,下の方にして, eval("_root.meme"+i)._x = -25; の _x を _y にすれば上に移動します。 あと,書かれていらっしゃるサンプルは, eval とかいう半使用禁止の古い関数が使われていますし, 全体的にしくみやスクリプトが古ぼけています。 全面的に見なおした方が良いと思います。 /////////////////////////////////////////////////// 配布されているサンプルを Flash 8 で開いている状態から説明します。 まず, [ファイル]→[パブリッシュ設定]で,Flashタブを選択し, バージョン Flash Player 5 と設定されているものを, バージョン Flash Player 6 または 7 または 8 に変更してください。 Flash MX (Flash Player 6) 以降は, onClipEvent (enterFrame) イベントハンドラ ではなく, MovieClip.onEnterFrame イベントハンドラメソッドが使えます。 これによって,ステージ外の左上にある奇妙な存在の ■ のムービークリップは不要になります。 この ■ のムービークリップを削除してください。 次に最下レイヤーに新規レイヤーを作成して, その最下レイヤーのステージ上に楕円ツールで小さな● を描きます。 その●をムービークリップに変換します。 そしてその ● ムービークリップ をダブルクリックして,ムービークリップ内の編集に入ります。 次に ● ムービークリップ 内にある ● の塗りを削除します。 これで空のムービークリップが最下レイヤーに作成されたことになります。 任意の場所をダブルクリックして, _root のタイムラインの編集に戻ります。 上で作成した空のムービークリップは, ○ に + を足した形のものでステージ上に存在すると思いますから, その ○ に + を足した形のものをステージの左上のコーナーに移動させます。 ○ に + を足した形のものにインスタンス名を付けます。 この説明では 「my_mc」 というインスタンス名を付けたとしてきます。 _root のタイムラインに,さらにレイヤーを追加し, そのレイヤーをアクションスクリプト記入のための専用レイヤーと勝手に決めます。 そのレイヤーに次のように書けば, (1)質問1 が解決できると思います。 ------------------------------------------------- // フレームに書くので onClipEvent(load) は不要です count = 0; use = new Array(); for (i=0; i<10; i++) { use[i] = 0; } // onClipEvent(lenterFrame) は撤廃しています _root.my_mc.onEnterFrame = function() { count++; if (count>60) { count = 0; for (i=0; i<10; i++) { if (use[i] == 0) { use[i] = 1; // my_mc 内に attachMovie // 以降の this は _root.my_mc を指します this.attachMovie("meme", "meme"+i, i); // eval関数は全廃しています this["meme"+i]._x = -25; this["meme"+i]._y = Math.random()*200+50; this["meme"+i].dx = Math.random()*1+1; break; // for文終了 } } } for (i=0; i<10; i++) { if (use[i] == 1) { this["meme"+i]._x += this["meme"+i].dx; if (this["meme"+i]._x>425) { use[i] = 0; this["meme"+i].removeMovieClip(); } } } }; ------------------------------------------------- あとは,この原型を基に, (2)質問2 と (3)質問3 が解決するように変更します。 ------------------------------------------------- count = 0; use = new Array(); for (i=0; i<10; i++) { use[i] = 0; } _root.my_mc.onEnterFrame = function() { count++; if (count>60) { count = 0; for (i=0; i<10; i++) { if (use[i] == 0) { use[i] = 1; this.attachMovie("meme", "meme"+i, i); // 初期座標を変更します this["meme"+i]._x = Math.random()*350+25; this["meme"+i]._y = Stage.height+50; // スピードを速めます 変数名 も一応 dy に変えます this["meme"+i].dy = Math.random()*2+2; break; // for文終了 } } } for (i=0; i<10; i++) { if (use[i] == 1) { // y座標の変化に変更します this["meme"+i]._y -= this["meme"+i].dy; // yの最少値に変更します if (this["meme"+i]._y<-50) { use[i] = 0; this["meme"+i].removeMovieClip(); } } } }; ------------------------------------------------- と,一応こんな感じにしておきます。 純粋な ActionScript 1.0 形式のスクリプトです。 書かれていらっしゃるサンプルサイト全体的に思うことですが, スクリプトやしくみが古い物がかなり混在しています。 Flash 8 などではそのまま使用しない方が良い物もかなりありますし,パブリッシュの設定にも注意してください。 思わぬところでトラブル(ハプニング)や不具合が生じる可能性があります。 ActionScript コピペ型 のサンプルではなく,FLAファイル配布型のサンプルですからなおさらです。 この回答では,全く 0 から作成する方法は書いていませんが(書けませんが), 何にも考えずに,バージョンも気にせずに,FLA ファイルを改良使用しようとすると,思いもよらないところでしっぺ返しがくることがありますので要注意です。 わからないスクリプトがあれば1つ1つヘルプで確認&理解して(たとえば eval を検索), スクリプト全体を理解した上で,最初から自分で作成する方が良いと思います。 「スクリプトの使い方」 や 「考え方」 を身に付けるには,実戦的で良いサンプルがそろったすばらしいサイトだと思います。

関連するQ&A