• 締切済み

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 ----------------------------- どうか、よろしくお願い致します。

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

みんなの回答

  • 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

  • ムービークリップ(以下mc)を複製したときの深度の設定で困っています。

    ムービークリップ(以下mc)を複製したときの深度の設定で困っています。 使用ソフト:Adobe Flash CS4 professional flashのバージョン:flashlite1.1 duplicateMovieClip(コピー元mc名,新mc名,深度(例えば10など)); と書いてmcの複製はしっかりできているのですが、深度を「レイヤー内で一番上」に設定したいのですが、どう設定していいかわからず困っています。 通常、レイヤーが3つある場合、重ね順で言うと一番上のレイヤーが最前面に、一番下のレイヤーが最背面に設定されています。 そこで、一番下のレイヤーに上記プログラムを書いて一番下のレイヤーにmcを複製したいのですが、複製したmcは一番上のレイヤーよりも最前面に配置されてしまうのです。 duplicateMovieClipを書いているレイヤー内で最上位に配置したい場合、深度にどのような設定をすればいいか教えてください。

  • AS3 ムービークリップの配置について

    ステージ上に、ムービークリップ mc1 mc2 があるとします。 mc2の24フレーム目の中に、mc3を配置し、mc2の24フレーム目にこんなプログラムを書くとします。 //一秒後に、mc3を移動      mc3.y=260;      mc3.x=MovieClip(parent).mc1.x; すると、mc3の配置は、mc2を基準としたx.y軸で配置されてしまいます。 (すいません。 言葉での説明が難しいです。) 私は、ステージを基準として配置したいのですが、いったいどのように書けばいいですか? ちなみに以下のようにすると私の求めていた結果が得られました。 ステージ上の見えない所に mc3を置いて、mc2の24フレームに      MovieClip(parent).mc3.y=260      MovieClip(parent).mc3.x=mc.x; 正直言葉での説明が難しく、わかりにくいかと思いますが回答よろしくお願いします。

    • ベストアンサー
    • Flash
  • swfを背面に表示する方法を教えて

    ページ上部にスタイルシートとjavascriptでつくったプルダウンメニューを配置し、以下に記述するオブジェクトは背面に表示されるよう実装しましたが、swf(フラッシュ)ファイルを配置した場合に限って、メニューが背面にまわってしまいます。どなたか解決方法を教えてください。

    • ベストアンサー
    • HTML
  • 複数の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
  • flashでムービークリップを移動したい。

    下記のようなback_mcを作成しました。 レイヤー1 _root.back_mc.onPress=function(){ _root.back_mc_x=_root.back_mc_x-50; } レイヤー2 ○の絵 これをシートの上に配置しても動作しません。 ○の絵をクリックし続けると、移動するものが作りたいのですが... なるべく別解よりは、上のコードのミスを指摘してほしいです。

    • ベストアンサー
    • Flash
  • FLASHで部品(シンボル)の最背面が出来ない

    こんにちは。 FLASHで部品(シンボル)の最背面が出来ません。 ○を先に描き■を上に描き、■をシンボルに子細背面にするのですが、移動しません。これだけでは移動できないのでしょうか? ○と■は別レイヤーです。 よろしくお願いします

  • AutoCAD塗りつぶしが背面にならない

    AutoCAD 2005LT です。 CADのオブジェクトの塗りつぶしをしたいのですが、塗りつぶしまではOKなのですが、どうしても背面に行ってくれません。 ポリラインを選択し、ハッチングのダイアログボックスでSOLID、見本を「RED]で表示順序を「最背面へ移動」 を選択し、オブジェクトの選択で閉じます。 ポリラインを選択し、右クリックでプレビューをクリックするのですが、塗りつぶしの領域は真っ赤で、下の線は見えません。  他の設定があるのでしょうか。 ハッチングを選択して、ツールから表示順序を最背面にしても、後ろに行ってくれません。 よろしくお願い致します。

  • 背面のコンポーネントが操作できてしまう

    ActionScript2で画面を作っております。 ボタンなどのコンポーネントが並んだメインの画面の上に ダイアログボックスを表示させたいと思い、 getNextHighestDepth()で取得した深度に empty movieclipを作って、 そこにダイアログボックスのビットマップをattachして 表示させました。 表示はうまくできたのですが、ダイアログボックスの上から 背面にあるボタンなどが操作できてしまいます。 ダイアログボックス表示中は背面のコンポーネントは 操作できなくしたいのですが、どうすればよいでしょうか? 背面のコンポーネントにenabled=falseを設定するのも 考えましたが、数が多いのでいちいち設定するのが大変です。 デザイン上visible=falseにすることもできません。 最前面のビットマップ(orそれがattachされているmovieclip)に だけマウスイベントが来るようにできればよいのですが。

    • ベストアンサー
    • Flash
  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • 複数のムービークリップについて

    毎度すみません。 複数のムービークリップ(以下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

専門家に質問してみよう