- ベストアンサー
Flash ActionScriptで移動するMCを停止・再生する方法とは?
- ActionScriptを使用して、左から右へ移動するMCを作成する方法と、マウスオーバーで停止し、マウスアウトで再生する方法を教えてください。
- 質問者は、左から右へ移動するMCを作成することはできたが、MCにマウスオーバーしても停止できないため、その後の動作ができない状況にある。
- 質問者のシナリオでは、左から歩いてきた猫がマウスオーバーで立ち止まり、顔を洗い、マウスアウトすると再び歩き出すという動作を実現したい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 まだ正常に動きませんか? いくら色んなことに挑戦してみても, #1の補足で書かれているような現象を再現できません。 #1で書いたものは, スクリプト的には FlashMX 以上(Flash Player 6 以上)で動作します。 「Flash 5 用 SWF にパブリッシュしたのだろうか?」 と思い Flash Player 5 の SWF にパブリッシュしてみても, 警告は出るし,パブリッシュされたものはピクリとも動かないしで, #1 の補足に書かれているように 「左から右への移動は大丈夫です。」 という状態にすらなりません。 また, Flash Player 6 以上のパブリッシュだと,無事動作します。 ムービークリップインスタンスではなく, 「グラフィックインスタンスに書き間違えているのだろうか?」 とも思いましたが, グラフィックインスタンスにはそもそもスクリプトが書けない仕様なので, これもちがいますね。 ==================== 赤丸とか青丸と書いたのは, 塗りの色が 赤 や 青 やという色の 「塗り入りの丸い絵」 のことですよ。 新規ドキュメントを作成して, まず,ステージ上に 赤い塗りの丸 (直径5mm~10cm(適当で良い)) を描きます。 その 赤い丸の塗り 自体を選択して, 「修正」→「シンボルに変換」で「ムービークリップ」に変換するのです。 その変換したムービークリップをダブルクリックしてみると, ムービークリップの中に入れます。 ムービークリップの中は当然,1レイヤー1フレームのみで, さっき書いた赤い塗りの丸があるだけのはずです。 ---赤丸ムービークリップ内のタイムライン------ 1 □ レイヤー 筆・・・|●| ↑ 赤丸の塗りがステージ上にある ------------------------------------- そのムービークリップ内のタイムラインを2フレームにして, 2フレーム目をキーフレームにした上で, 2フレーム目の ステージ上にある 赤い塗りの丸 を 青色にバケツツールで塗りかえるのです。 ---赤丸ムービークリップ内のタイムライン------ 1 □ レイヤー 筆・・・|●|●| ↑ ↑ 赤 青 ------------------------------------- そして, 「編集」→「ドキュメントの編集」 などで,メインムービーのタイムラインの編集に戻ります。 戻ると当然1レイヤー1フレームのはずです。 ---メインムービーのタイムライン-------------- 1 □ レイヤー 筆・・・|●| ↑ 赤丸ムービークリップがステージ上にある ------------------------------------- ムービークリップ内は フレーム1 の状態が表示されて止まっているはずなので, ムービークリップは赤い丸が見えるだけのはずです。 そのステージ上の赤い丸のムービークリップを選択した状態で, ステージ下にあると思われるアクションパネルを表示させて, そのアクションパネルの白いアクションを書く部分に, #1 で書いたスクリプトの // このムービークリップが登場したとき onClipEvent (load) { ~略~ // spd ずつ右へ移動 this._x += spd; } までをコピペするのです。 そして, 「制御」→「ムービープレビュー」 をしてみるか, もしくは, 「ファイル」→「パブリッシュ」をしてみるのです。 すると, つまり訂正は全くなしで, #1で赤丸ムービークリップを作成する部分の説明を細かくしただけのことです。 ==================== つまり, どうやったら,#1の補足に書かれているようなことになるのかがわかりません。 このページに書いたスクリプトをコピペしなおしてみても結果は正常に動作します。 #1 ではムービークリップは1回しか作成していませんよ。 階層構造は次の通りです。 _root(メインムービー) └ 赤い丸ムービークリップ (↑赤青入れ替わる) 赤い丸のムービークリップが2重になっているということはありませんか? _root └ 赤い丸ムービークリップ └ 赤い丸ムービークリップ (↑赤青入れ替わる) 赤いムービークリップが2重になっていれば, #1 の補足で書かれているような現象が起こることも考えられます。
その他の回答 (1)
> ・停止したMCはその場で別のMCに差し替え と書かれていますが, 本当に 「別のMCに差し替え」 をすると面倒だと思うので, 「右から左に歩く猫」 と,「顔を洗う猫」を, 同じ「猫」というムービークリップ内に作成して, そのムービークリップのタイムラインを gotoAndPlay() や gotoAndStop() で移動させる方が良いのではないでしょうか。 サンプルです。 まず,赤丸をステージ上に描いて,ムービークリップに変換します。 その赤丸ムービークリップをダブルクリックして, 赤丸ムービークリップ内のタイムラインの フレーム2 を選択して, 「キーフレームの挿入」で 2フレーム にします。 そして,フレーム2 をキーフレームに変換して, フレーム2 の赤丸を青丸に塗りかえます。 ---赤丸ムービークリップ内のタイムライン------ 1 □ レイヤー 筆・・・|●|●| ↑ ↑ 赤 青 ------------------------------------- それで,メインムービーのタイムラインの編集に戻ります。 戻ると,赤丸ムービークリップがそのままあると思いますから, そのムービークリップ自体に次のように書きます。 -------------------------------------- // このムービークリップが登場したとき onClipEvent (load) { // とりあえずストップ(※不要かも) this.stop(); // スピードの初期値を指定(可変) spd = 5; } // // このムービークリップにマウスオーバーしたとき on (rollOver) { // スピードの値を 0 にする spd = 0; // フレーム2 へ(場合によってはgotoAndPlay) this.gotoAndStop(2); } // // このムービークリップからマウスアウトしたとき on (rollOut, dragOut) { // スピードの値を 5 にもどす spd = 5; // フレーム1 へ(場合によってはgotoAndPlay) this.gotoAndStop(1); } // // 1フレーム進む時間ごとに毎回実行 onClipEvent (enterFrame) { // spd ずつ右へ移動 this._x += spd; } -------------------------------------- これで, ムービープレビューなどしてもらうと動作確認ができると思います。 ムービークリップ内は 2フレーム しかありませんが, それぞれ複数フレームを用意して, 「右から左に歩く猫」 と「顔を洗う猫」のアニメーションを作成して, それぞれのフレームに gotoAndPlay しても良いと思います。 歩く猫 顔を洗う猫 □ レイヤー 筆・・・|●//////[]|●/////[]| この場合は, ムービークリップ内は複数フレームありますから,最初の, // とりあえずストップ(※不要かも) this.stop(); は不要となります。 また, ムービークリップ内は 2フレーム のままで, つまりスクリプトも上のままで, フレーム1 には「歩く猫」アニメのムービークリップ, フレーム2 には「顔を洗う猫」アニメのムービークリップを用意しても良いと思います。 それと, > 移動するMCにマウスオーバーしても、停止出来ません。 ということですが, 上記スクリプトの場合,常に猫は, // spd ずつ右へ移動 this._x += spd; で 変数spd に値ずつ右へ動かしているのですが, その 変数spd の値を マウスオーバー や マウスアウト によって変えているので, 止まったり動いたりします。 当然他の方法も多数ありますが, 1つの簡単な方法例です。
補足
sassakun様 早々のご回答を頂き、どうもありがとうございます。 ご教示の通り、赤丸と青丸を作成しスクリプトをそのまま貼り付けてみました。 ところが、赤丸と青丸が点滅するばかりで、マウスオーバーも動作しませんでした(泣) ちなみに、左から右への移動は大丈夫です。 どうしたものか、さっぱりです。。。 お手数をお掛けしますが、再度ご教示くださいますようお願いします。
お礼
sassakun様 大変ご丁寧にご教示いただきまして、誠にありがとうございます。 赤丸のレイヤー内で、青丸を作って2フレー目というのを勘違いしておりました。 ご指導とおり、再度やってみましたところ動作いたしました。 お陰様で助かりました。本当にありがとうございます。