FlashのMCに複数の動作をつける方法

このQ&Aのポイント
  • FlashのMCに複数の動作をつけるためには、スクリプトを別々に設定している場合は思うような動きを出すことができません。同じフレームにスクリプトを書くことで解決できます。
  • 赤の四角(R_mc1、R_mc2)と白の四角(W_mc1、W_mc2)のムービークリップがあります。赤のMCをドラッグすると他のMCに重なると常に上に表示されます。ドラッグした赤のMCが白のMCにヒットすると色が変わります。
  • 環境はFlash Professional CS5.5 Action Script 2.0 Flash Player10です。スクリプト(1)とスクリプト(2)を組み合わせることで、赤のMCをドラッグすると赤から黄色に変化し、クリックすると赤から白色に変化します。リセットボタンをクリックするとMCが元の位置に戻ります。
回答を見る
  • ベストアンサー

FlashのMCに複数の動作をつけるためには

ムービークリップに スクリプト(以下(1)(2))をつけたいのですが、 そのスクリプトを別々(フレームやムービークリップ)に設定しているためか、 思うような動きを出すことができません。 同じフレームにスクリプトを書くことができれば 解決できると思うのですがそれができなくて・・・。 私の考えるイメージは以下の通りです・・・。 (1)フレーム上に赤の四角□(R_mc1、R_mc2)と白の四角□(W_mc1、W_mc2)のムービークリップ(MC)があります。 (2)赤のMCはドラッグすることができ、ドラッグしたMCは他のMCに重なると常に上に表示される。 (3)ドラッグした赤のMCが白のMCにヒットすれば(重なれば)、赤から黄へと色が変わる。  (そのために、赤のMC内のタイムラインには、フレーム1に赤、フレーム2に白、フレーム3に黄色の四角□を置いて、ヒットすればMC内のフレーム3にいくようにする。) (4)赤の四角□をドラッグせずにクリックだけをした場合は、MC内のフレーム2に行き、赤から白に色が変わる。 (5)リセットボタンをクリックすると、赤や黄のMCが元の位置に戻る。(最初のMCに戻る) 環境は、Flash Professional CS5.5 Action Script 2.0   Flash Player10 です。 以下はフレームに書いたスクリプト(1)です。 //--------------------------- //深度カウント用変数を用意 var dep_cnt:Number = 1; //変数 i に 1~2を入れながらループ for (var i:Number = 1; i<=2; i++) { //★「R_mc○」内の再生を停止 this["R_mc"+i].stop(); //★「R_mc○」内の変数 target_mc に「W_mc○」の参照を代入 this["R_mc"+i].target_mc = this["W_mc"+i]; //「R_mc○」押下時に関数 dragMC を実行 this["R_mc"+i].onPress = dragMC; //「R_mc○」を放した時に関数 dropMC を実行 this["R_mc"+i].onRelease = dropMC; //「R_mc○」をMC外で放した時にも関数 dropMC を実行 this["R_mc"+i].onReleaseOutside = dropMC; } //関数 dragMC の定義 function dragMC():Void { //深度カウント用変数をカウントアップ dep_cnt++; //押下されたMCをその深度に移動 this.swapDepths(dep_cnt); //押下されたMCのドラッグを開始 this.startDrag(); //★マウスが動く度に関数 watchHitW_mc を実行 this.onMouseMove = watchHitW_mc; } //関数 dropMC の定義 function dropMC():Void { //放されたMCのドラッグを終了 this.stopDrag(); //★マウスが動く度に関数 watchHitW_mc を実行するのを解除 delete this.onMouseMove; } //★関数 watchHitW_mc の定義 function watchHitW_mc():Void { //★ドラッグ中のMCがそのMC内の変数 target_mc に // 代入したMCとヒットしていれば if (this.hitTest(this.target_mc)) { //★ドラッグ中のMC内をフレーム3で停止 this.gotoAndStop(3); } else { //★それ以外はドラッグ中のMC内をフレーム1で停止 this.gotoAndStop(1); } } //--------------------------- 以下はR_mc1とR_mc2自体に書いたスクリプト(2)です。  R_mcをクリックしたときに白色になるようにR_mc 内のフレーム2(白い四角□)に行くようにしてあります。 (本当は、上記に示したフレームに書くスクリプト(1)に加えて書かなければいけないのだと思うのですが、その書き方がわからないので、R_mc自体に書いています。) //--------------------------- on (release) { this.gotoAndPlay(2); } //--------------------------- 以上のようなスクリプト(1)(2)にすると、赤のMC(R_mc1、R_mc2)をドラッグすると、スクリプト(1)ではなく、スクリプト(2)が優先されて、赤から黄にしたいのに、白に変わってしまうのです。 上記の私の考えるイメージ(1)~(5)が実行できるようなフレームに書くスクリプトを教えてください。 どうぞよろしくお願いいたします。 補足 リセットボタンには以下のスクリプトを書いてあります。    リセットボタンは同じフレーム内にスクリプトを書かずに、リセットボタン自体に書いてもかまいません。 //------------------ on (release) { //変数 i に 1~2を入れながらループ for (i=1; i<=2; i++) { //「R_mc○」を削除 this["R_mc"+i].removeMovieClip(); } gotoAndStop(1); gotoAndStop(2); } //------------------

  • Flash
  • 回答数3
  • ありがとう数4

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

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

#1です。 実際に作ってみましたが, #1の[補足]に書かれていらっしゃるような不具合現象は起きませんでしたけどね。。。 ちなにみ私は メインのタイムライン(_root)の フレーム1 に ご質問本題のフレームのスクリプトを書いて メインのタイムラインの フレーム2 に stop(); と書いています。 ↑「絶対にこうすべき」という意味ではなくて, 動作検証のために作成しているファイルにおいて, 「私はそうしている」と言うだけの意味です。 というわけで, メインのタイムライン(_root階層)の様子は 下の 【添付図】↓ のようになっています。 #1より修正したスクリプトは2箇所(2行)で 変更点は次の通りです。 ◎メインのタイムラインの フレーム1 のスクリプト変更点 //変数 i に 1~2を入れながらループ for (var i:Number = 1; i<=2; i++) {   ↓変更↓ //変数 i に 1~10 を入れながらループ for (var i:Number = 1; i<=10; i++) { ◎リセットボタンのスクリプト変更点 //変数 i に 1~2を入れながらループ for (i=1; i<=2; i++) {   ↓変更↓ //変数 i に 1~10 を入れながらループ for (i=1; i<=10; i++) { 動作検証に使用した Flash のバージョン は Flash 8 と Flash CS 4 と Flash CS 5.5 です。 (OS は Windows Vista と XP です。) SWFのパブリッシュ設定は ActionScript 2.0 です。 そして Flash Player 6 設定でも Flash Player 10 設定でも(正確には Flash Player 10 & 10.1 でも) 不具合なく動作しました。 というわけで,一応の報告まで。

その他の回答 (2)

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

#1&#2です。 #2では, なぜか【添付図】が付かなかったため 再添付します↓。

kochacha
質問者

お礼

BlurFiltanさん、いろいろなバージョン&OSでの動作確認、本当にありがとうございます。 時間や手間をおかけしてしまって本当に申し訳ありません。また、感謝の気持ちでいっぱいです。 もう一度、最初から作り直してみます。きっと私がアドバイス通りにスクリプトを書くことが出来なかった ことが原因だと思います(>_<) Flash初心者なので失敗の繰り返しですが、その度にBlurFiltanさんにはお世話に なってばかりです。いつもお力を貸してくださり、本当に本当にありがとうございますm(__)m

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

ご質問内容に 少々不可解な点がありますね。。。 > (4)赤の四角□をドラッグせずに > クリックだけをした場合は、 > MC内のフレーム2に行き、赤から白に色が変わる。 これに関してですが, まず「クリック」とは 「ボタンや MC などをマウスで一旦押して その押したボタンや MC などを放す行為」 を指しますが そこのところはよろしいですよね? 上の引用部分を言いかえるなら, まずは赤の四角□MCを一旦押したとします。 その後 ドラッグせずに「マウスを上げたとき」には そのMC内を フレーム2 に行かせて 少しでもドラッグしたときには そのMC内を フレーム1 または フレーム3 に行かせるという意味になります。  ↓↓ 例 ↓↓ まず R_mc1 を一旦押す →もしドラッグせずにマウスアップしたら R_mc1 内を フレーム2 にする。 それ以外で(=少しでもドラッグをした場合で), →もしドラッグ中に R_mc1 が W_mc1 に重なれば R_mc1 内を フレーム3 にする。 →もしドラッグ中に R_mc1 が W_mc1 に重なっていなければ R_mc1 内を フレーム1 にする。 (少しでもドラッグをしたら R_mc1 内を フレーム2 に行かせることはない。) こういう解釈でよろしいのでしょうか? これで良いとするなら, そうなるようにちゃんと場合分けを考えてスクリプトを組まなければならないでしょう。 > スクリプト(2)が優先されて、赤から黄にしたいのに、 > 白に変わってしまうのです。 そりゃ,そうなります。 現状ではマウスアップしたときに, 無条件にMC内を フレーム2 に行かせるようにしているのですから そんな感じになってしまいます。 希望通りの動きにするには 無条件に フレーム2 に行かせるのではなくて ちゃんと条件を付けて フレーム2 に行かせる必要があります。 あと > on (release) { >  this.gotoAndPlay(2); > } この gotoAndPlay も不可解です。 gotoAndStop の間違いではないのでしょうか? というわけで何だか不可解な点がありますが 書かれていらっしゃる内容の通りをスクリプト化してみます。   まず R_mc1とR_mc2自体に書かれた on (release) { this.gotoAndPlay(2); } は全て消してください。 そして フレームに書くスクリプトの修正例です↓。 //--------------------------- //深度カウント用変数を用意 var dep_cnt:Number = 1; //▼ドラッグされたかどうかのフラグとなる変数を用意 var drg_flg:Boolean; //変数 i に 1~2を入れながらループ for (var i:Number = 1; i<=2; i++) { //★「R_mc○」内の再生を停止 this["R_mc"+i].stop(); //★「R_mc○」内の変数 target_mc に「W_mc○」の参照を代入 this["R_mc"+i].target_mc = this["W_mc"+i]; //「R_mc○」押下時に関数 dragMC を実行 this["R_mc"+i].onPress = dragMC; //「R_mc○」を放した時に関数 dropMC を実行 this["R_mc"+i].onRelease = dropMC; //「R_mc○」をMC外で放した時にも関数 dropMC を実行 this["R_mc"+i].onReleaseOutside = dropMC; } //関数 dragMC の定義 function dragMC():Void { //深度カウント用変数をカウントアップ dep_cnt++; //▼ドラッグされたかどうかのフラグを false にする drg_flg = false; //押下されたMCをその深度に移動 this.swapDepths(dep_cnt); //押下されたMCのドラッグを開始 this.startDrag(); //★マウスが動く度に関数 watchHitW_mc を実行 this.onMouseMove = watchHitW_mc; } //関数 dropMC の定義 function dropMC():Void { //放されたMCのドラッグを終了 this.stopDrag(); //▼ドラッグされたかどうかのフラグが false であれば if (!drg_flg) { //▼クリックしたMC内をフレーム2で停止 this.gotoAndStop(2); } //★マウスが動く度に関数 watchHitW_mc を実行するのを解除 delete this.onMouseMove; } //★関数 watchHitW_mc の定義 function watchHitW_mc():Void { //▼ドラッグされたかどうかのフラグを true にする drg_flg = true; //★ドラッグ中のMCがそのMC内の変数 target_mc に // 代入したMCとヒットしていれば if (this.hitTest(this.target_mc)) { //★ドラッグ中のMC内をフレーム3で停止 this.gotoAndStop(3); } else { //★それ以外はドラッグ中のMC内をフレーム1で停止 this.gotoAndStop(1); } } //--------------------------- スクリプトのコメント行で▼を付けた行が ご質問のスクリプトに付け足しをした部分です。 (このフレームのスクリプトに関しては,付け足しをしただけで削除した部分はありません。)

kochacha
質問者

補足

Blur Filtanさんには、今回も本当にお世話になります。 説明不足で不可解な質問になってしまいました。すみません(^_^;) でも、私の意図した解釈をしてくださりありがたいです。 早速、ご回答くださったスクリプトをフレームに書いて動作確認をしてみました。 R_mcやW_mcの数を増やしてそれぞれにインスタンス名(R_mc3,R_mc4,R_mc5・・・)(W_mc3,W_mc4,W_mc5・・・)とつけてパブリッシュ後の動作確認をしました。 ほとんどのMCは、意図した動作をしてくれるのですが、なぜか全く反応しない (クリックもドラッグもできない)MCができてしまうのです。 なぜでしょうか? R_mc自体に書いたスクリプトはきちんと削除もしてあります。 また、R_mcやW_mcは10個ずつに増やしたので、 //変数 i に 1~10を入れながらループ for (var i:Number = 1; i<=10; i++) { と変数iの数値もきちんと変更したのですが・・・。 すみませんが、再度、ご回答をお願いいたしますm(__)m

関連するQ&A

  • FlashでドラッグしたMCをリセットして戻すには

     今回もまたFlashのことで教えてください。 先日教えていただいた「ドラッグしたMCを常に上に表示&色の変化」がきちんと動作できて とても助かりましたが、また、新たな課題が出たので教えて下さい。(これまでできていたリセットボタンがうまく動作しなくなっちゃったのです。) 具体的に言うと、つまずいている課題は以下の通りです。  ドラッグして移動したMCを元の位置(フレーム上の最初にあった位置)に戻すために「リセットボタン」を配置しましたが、このボタンでリセットしてもなぜかドラッグして移動したMCもそのまま残った状態で表示されるのです。つまり、完全リセットされないのです。  ドラッグしたMCが元の位置に戻り、ドラッグする以前のフレームが表示されるようにしたいのでどうか教えてください。 私が書いたスクリプトとタイムラインを示しますので、どうぞよろしくお願いいたします。 バージョン Flash CS5.5    アクションスクリプト2.0     Flash Player 6 です。   フレーム1とフレーム2があり、フレーム1はフレーム2に進むためのボタンを配置。 フレーム2には赤の□2つ。白の□2つを配置。 フレーム2に書いたスクリプト(1)は以下の通り (ドラッグしたMCが常に上に表示&色の変化をさせるスクリプト) (赤の□のインスタンス名「R_mc1」「R_mc2」   白の□のインスタンス名「W_mc1」「W_mc2」 ) //--------------------------- //深度カウント用変数を用意 var dep_cnt:Number = 1; //変数 i に 1~2 を入れながらループ for (var i:Number = 1; i<=2; i++) { //★「R_mc○」内の再生を停止 this["R_mc"+i].stop(); //★「R_mc○」内の変数 target_mc に「W_mc○」の参照を代入 this["R_mc"+i].target_mc = this["W_mc"+i]; //「R_mc○」押下時に関数 dragMC を実行 this["R_mc"+i].onPress = dragMC; //「R_mc○」を放した時に関数 dropMC を実行 this["R_mc"+i].onRelease = dropMC; //「R_mc○」をMC外で放した時にも関数 dropMC を実行 this["R_mc"+i].onReleaseOutside = dropMC; } //関数 dragMC の定義 function dragMC():Void { //深度カウント用変数をカウントアップ dep_cnt++; //押下されたMCをその深度に移動 this.swapDepths(dep_cnt); //押下されたMCのドラッグを開始 this.startDrag(); //★マウスが動く度に関数 watchHitW_mc を実行 this.onMouseMove = watchHitW_mc; } //関数 dropMC の定義 function dropMC():Void { //放されたMCのドラッグを終了 this.stopDrag(); //★マウスが動く度に関数 watchHitW_mc を実行するのを解除 delete this.onMouseMove; } //★関数 watchHitW_mc の定義 function watchHitW_mc():Void { //★ドラッグ中のMCがそのMC内の変数 target_mc に // 代入したMCとヒットしていれば if (this.hitTest(this.target_mc)) { //★ドラッグ中のMC内をフレーム2で停止 this.gotoAndStop(2); } else { //★それ以外はドラッグ中のMC内をフレーム1で停止 this.gotoAndStop(1); } } //--------------------------- ドラッグしたMCを元の位置に戻すための「リセットボタン」に書いたスクリプト(2)は以下の通り。 (以前に以下のようなスクリプトで元の配置にリセットされたので同じく書いてみましたが、今回はドラッグしたMCが消えず、そのまま表示されてしまいました。 //--------------------------- on (release) { gotoAndPlay(1); } on (release) { gotoAndStop(2); } //---------------------------  

    • ベストアンサー
    • Flash
  • Flashで、ドラッグしたMCを上に表示&色の変化

    先日、Flashで、ドラッグしたムービークリップ(MC)を常に表示する方法を教えてもらい、 うまく表示することができましたが、今回は、このMCに色を変化させるスクリプトをつけ加えたいので 教えてください(色の変化は、別の質問者の回答を参考にしましたが、うまくいかないので・・・。) 私が作成したいイメージは以下の通り((1)~(3))です。 (1)赤の□のMCが2つ(インスタンス名:「R_mc1」「R_mc2」)と白の□のMCが2つ(インスタンス名:「W_mc1」 「W_mc2」)。 赤のMCはそれぞれMC内の2フレーム目に黄色の□を置いている。 (2)赤の□をドラッグして白の□にふれると、赤の□が黄色の□に変化する。  (R_mc1はW_mc1とふれたときにだけ黄色に変化。R_mc2はW_mc2とふれたときにだけ黄色に変化。) (3)赤の□は、どのMCに重なっても常に上に表示されるようにする。 以下にスクリプトを書いてあります。以下のスクリプトは赤や白のMCが置いてあるフレームに書いてみましたがうまくいきません。教えてgooでいただいた2種類のスクリプトを単純にくっつけただけなので、うまくいかないのは当然だと思いますが・・・。 すみませんが、わかりやすく教えてください。どうぞよろしくお願いいたします。 補足 Flashバージョン CS5.5   アクションスクリプト2.0  FlashPlayer6 です。 //------------------------------------ //深度カウント用変数を用意 var dep_cnt:Number = 1; //変数 i に 1~2 を入れながらループ for (var i:Number = 1; i<=2; i++) { //「R_mc○」押下時に関数 dragMC を実行 this["R_mc"+i].onPress = dragMC; //「R_mc○」を放した時に関数 dropMC を実行 this["R_mc"+i].onRelease = dropMC; //「R_mc○」をMC外で放した時にも関数 dropMC を実行 this["R_mc"+i].onReleaseOutside = dropMC; } //関数 dragMC の定義 function dragMC():Void { //深度カウント用変数をカウントアップ dep_cnt++; //押下されたMCをその深度に移動 this.swapDepths(dep_cnt); //押下されたMCのドラッグを開始 this.startDrag(); } //関数 dropMC の定義 function dropMC():Void { //放されたMCのドラッグを終了 this.stopDrag(); } //------------------------------------ //--------------------------- //「R_mc1」上でマウスダウン時に実行するメソッドを定義 R_mc1.onPress = function():Void { //「R_mc1」のドラッグを開始 R_mc1.startDrag(); //マウスが動く度に関数 watchHitW_mc1R_mc1を実行 this.onMouseMove = watchHitW_mc1R_mc1; }; //「R_mc1」上でマウスアップ時に実行するメソッドを定義 R_mc1.onRelease = R_mc1.onReleaseOutside = function():Void { //このMC(R_mc1)のドラッグを終了 this.stopDrag(); //マウスが動く度に関数 watchHitW_mc1R_mc1 を実行するのを解除 delete this.onMouseMove; } //関数 watchHitW_mc1R_mc1の定義 function watchHitW_mc1R_mc1():Void { //もし「R_mc1」が「W_mc1」にヒットしていれば if (R_mc1.hitTest(W_mc1)) { //「R_mc1」内の再生を フレーム2 で停止 R_mc1.gotoAndStop(2); } else { //ヒットしていなければ「R_mc1」内の再生を フレーム1 で停止 R_mc1.gotoAndStop(1); } } //--------------------------- //「R_mc2」上でマウスダウン時に実行するメソッドを定義 R_mc2.onPress = function():Void { //「R_mc2」のドラッグを開始 R_mc2.startDrag(); //マウスが動く度に関数 watchHitW_mc2R_mc2を実行 this.onMouseMove = watchHitW_mc2R_mc2; }; //「R_mc2」上でマウスアップ時に実行するメソッドを定義 R_mc2.onRelease = R_mc2.onReleaseOutside = function():Void { //このMC(R_mc2)のドラッグを終了 this.stopDrag(); //マウスが動く度に関数 watchHitW_mc2R_mc2 を実行するのを解除 delete this.onMouseMove; } //関数 watchHitW_mc2R_mc2の定義 function watchHitW_mc2R_mc2():Void { //もし「R_mc2」が「W_mc2」にヒットしていれば if (R_mc2.hitTest(W_mc2)) { //「R_mc2」内の再生を フレーム2 で停止 R_mc2.gotoAndStop(2); } else { //ヒットしていなければ「R_mc2」内の再生を フレーム1 で停止 R_mc2.gotoAndStop(1); } }

    • ベストアンサー
    • Flash
  • AS2でカスタムカーサーを使ってMCをドラッグ

    いつもお世話になっております。 AS2でMCをドラッグするという質問を前回させていただいた際に 適切なご回答を頂いたのですが、今回ドラッグするMC上にカスタムのカーサーを入れようと すると、ドラッグができなくなってしまいました。 twolargeMC上にマウスをrolloverすると、オリジナルの手のカーサーが現れ、 ドラッグするとカーサーがグーをした手に変わり、更にtwolargeMCのイメージが ドラッグできるようにしたいです。 どなたかご教授頂けますと幸いです。 カーサーはhandMCと名づけ、MCに直に onClipEvent (load) { handMC.startDrag(true); Mouse.hide(); }を付けました。更にMC内に"image"(手のカーサーイメージ)、"grab"(グーをした手のイメージ)、"none"(何も入れてない)ラベル名を入れました。 現在は下記のスクリプトでオリジナルの手のカーサーだけ表示するのに成功したのですが、ドラッグができず、MouseDownの際にグーをした手のカーサーに変えるスクリプトがいまいち分かりません。 宜しくお願いいたします。 質問番号:6354856 下記のAppleショップのように、拡大イメージを表示した後、 そのイメージをDragでドラッグできるようにし、クリックすると 元の小さいイメージを表示できるようにしたいのですが、うまくいきません。 http://store.apple.com/uk/product/MC596ZM/A?fnod … 標準サイズのイメージをtwoMCとしてFrame20に入れ、Frame25に 拡大イメージ(twolargeMC)を入れました。 Frame20のアクション twoMC.onRelease = function() { gotoAndStop(25); } Frame25のアクション twolargeMC.onPress = function() { startDrag(this); } twolargeMC.onRelease = function() { gotoAndStop(20); } 上記で一応イメージはドラッグできますが、マウスを離した途端 標準サイズのイメージになってしまいます。 これをドラッグした後も拡大イメージを表示しつつ、 再度クリックした際に標準サイズのイメージが表示できるようにしたいです。 どなたかご教授いただけますでしょうか。宜しくお願いします。 質問番号:6354856 No.1ベストアンサー20pt 回答者:BlurFiltan 回答日時:2010/12/01 18:51 元の Appleショップ サイトのJSで動くものが 私の環境では(だけ?)ドラッグできないので したいことが今ひとつ理解しにくいです。。。 (何だか出来の悪いJS...。無理をゴリ押ししてみっともないことになってるApple。) 良くはわかりませんが, 「ドラッグを 『した』か 『していない』か というフラグとなる変数」を作って それの変数の値を使って判断すれば良いのではないでしょうか。 --- Frame25 のアクション--------------- //ドラッグ 『した』『していない』のフラグをfalseにしておく var drag_flg:Boolean = false; //twolargeMCを押したときに実行するメソッドを定義 twolargeMC.onPress = function() { //twolargeMCをドラッグ開始 startDrag(this); // //マウスが動いたときに実行するメソッドを定義 this.onMouseMove = function() { //ドラッグ 『した』『していない』のフラグをtrueにする drag_flg = true; //即 このマウスが動いたときに実行するメソッドを削除 delete this.onMouseMove; }; }; //twolargeMCを放したときと //外で放したときに実行するメソッドを定義 twolargeMC.onRelease = twolargeMC.onReleaseOutside = function () { //もしドラッグ 『した』『していない』のフラグがfalseの場合 if (!drag_flg) { gotoAndStop(20); } else { //ドラッグ終了 stopDrag(); //ドラッグ 『した』『していない』のフラグをfalseに戻す drag_flg = false; } }; ------------

    • ベストアンサー
    • Flash
  • Flashでmc.onPress = function() を使ったスクリプトでわからない所が・・・

    FLASHのActionScriptで質問です。 今の赤・青・緑の3種類のムービークリップ(以下、MC)をそれぞれ6つ、 合わせて18つステージ上に配置し、それぞれに… 赤)markRed01_mc, markRed02_mc … markRed06_mc 青)markBlue01_mc, markBlue02_mc … markBlue06_mc 緑)markGreen01_mc, markGreen02_mc … markGreen06_mc という、インスタンス名をつけています。 --画面の模式図------------------ ┌───────────┐ │                 │ │● ● ● ● ● ●   │←赤の段 │                 │ │● ● ● ● ● ●   │←青の段 │                 │ │● ● ● ● ● ●   │←緑の段 │                 │ └───────────┘ -------------------------------- これらのMC全てに対して「マウスを押した時」に消えるようにするため、 以下のscriptをタイムライン上に記述しました。 for (var i = 1; i<=6; i++) { this["markRed0"+i+"_mc"].hit.onPress = function() { eval((targetPath(this).substring(0, 20))).play(); }; this["markBlue0"+i+"_mc"].hit.onPress = function() { eval((targetPath(this).substring(0, 21))).play(); }; this["markGreen0"+i+"_mc"].hit.onPress = function() { eval((targetPath(this).substring(0, 22))).play(); }; } [解説] ・MC内の当たり判定用のMC(インスタンス名:hit)に対し、  マウスを押した時にMCが再生(消えていくアニメーション)するようにしています。 ・MC内では最初にthis.stop();させ、  押して再生された後に、  MC内の最終フレームに来た時に再びthis.stop();するようしています。 このとき、上記のscriptを実行させると“問題なく動きます”。 しかし、MCに対するplay();命令で、 「eval((targetPath(this).substring(0, 20))...」という あまり「スマートでないやり方」になってしまっています。 そこで、これと同じように動作し、且つスマートに記述する方法があれば 教えていただきたく今回質問させていただきました。 なお、開発環境は以下の通りです。 --------------------------------------------------------------- システム:Microsoft Windows XP Professional Version2002 SP3  FLASH:macromedia FLASH Professional Ver8.0     ※ただし、Flash Player 7で動作すること。 --------------------------------------------------------------- 他に不足している点があれば、回答させていただきます。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flash AS2でMCをDragしたいです

    いつもお世話になっております。 下記のAppleショップのように、拡大イメージを表示した後、 そのイメージをDragでドラッグできるようにし、クリックすると 元の小さいイメージを表示できるようにしたいのですが、うまくいきません。 http://store.apple.com/uk/product/MC596ZM/A?fnode=MTY1NDAzOQ&mco=MTg1MTU3NDA 標準サイズのイメージをtwoMCとしてFrame20に入れ、Frame25に 拡大イメージ(twolargeMC)を入れました。 Frame20のアクション twoMC.onRelease = function() { gotoAndStop(25); } Frame25のアクション twolargeMC.onPress = function() { startDrag(this); } twolargeMC.onRelease = function() { gotoAndStop(20); } 上記で一応イメージはドラッグできますが、マウスを離した途端 標準サイズのイメージになってしまいます。 これをドラッグした後も拡大イメージを表示しつつ、 再度クリックした際に標準サイズのイメージが表示できるようにしたいです。 どなたかご教授いただけますでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Flash
  • キーボードで複数のMCを操作するには・・・

    FLASH初心者です。 色々検索してみたり試したりしたんですが、上手くいかなかったのでこの場を借りて質問させていただきます。 分かりにくい部分があったら申し訳ありません。 今、キーボードを使って複数のムービークリップを制御するFLASHを作成しているのですが、 画面上に複数のMCが配置してあって、その1フレーム目を何もない状態にし、2フレーム目からアニメーションが開始するようになっています。 キーを押してアニメーションが再生するところまではできたのですが、"A"に対応するMCを動かしたあと"B"に対応したMCを動かすと"A”のMCが消えてしまいます。 一度読み込んだMCを消えないようにするにはどうしたらいいでしょうか。 MCには下記のようにかきこんでいます。 onClipEvent (keyDown) { this.gotoAndStop(1); if (Key.isDown(66)) { this.gotoAndPlay(2); } } 深度のせいなのだろうかと思うのですが、いまいち深度をどう定義していいものか理解できず苦戦しております。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHでドラッグしたり…

    MacOS9.1でFlashMXを使っています。 今、フレーム1においてドラッグできるMCがあるのですが、1にあるボタンを押してフレーム2に移った時にそのMCのドラッグをさせなくするようにしたいのです。 どのようなスクリプトを書けば良いでしょうか? さっぱり分からないので、ヒントでも良いのでお願いします。

  • 複数の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初心者です。子ムービークリップの制御について教えてください Tシャツのシュミレーションがあるとします。 シャツ_mcに、1フレーム目「丸くび」、2フレーム目「Vネック」、のカタチで シャツ_mc.色_mcにマスクをかけています。 色_mcには1フレーム目「白」、2フレーム目に「赤」とします。 シャツ_mc.色_mcのそれぞれ1フレームにstop(); ボタン「丸くび_btn」「Vネック_btn」「白_btn」「赤_btn」の4つのボタンで それぞれ組み合わせを作りたいのですが 「丸くび_btn」に on (release) { _root.シャツ_mc.gotoAndStop(1); } 「Vネック_btn」に on (release) { _root.シャツ_mc.gotoAndStop(2); } 「白_btn」に on (release) { _root.シャツ_mc.色_mc.gotoAndStop(1); } 「赤_btn」に on (release) { _root.シャツ_mc.色_mc.gotoAndStop(2); } この場合「丸くび_btn」をクリックして「赤_btn」クリックで「丸くび赤シャツ」ができます ここまではいいのですが 赤の色を保持したまま「Vネック_btn」を押してVネック赤シャツのイメージも見たいのですが 色が白に戻戻ってしまいます。(色_mcの1フレーム目に戻る。) これをなんとかしたいのですが。 (色_mcが選ばれた状態で固定され勝手に移動しないようにしたい) アドバイスお願いいたします。

  • Flash lite1.1 ランダム

    r=random(7)+2; gotoAndStop(r); -------------------- 上記のアクションスクリプトでランダムのフレームに飛ばす方法はわかったんですが、指定のフレーム(例えば2,10,16,30のフレーム)に限定する方法はないでしょうか?

専門家に質問してみよう