• ベストアンサー

MCを2つ以上ドラッグする方法

環境は、Flash8,WinXPにて、FlashPlayer8、AS2での書き出しでオーサリングしております。 質問なのですが、 オリジナルマウスポインタを表示させているのですが、 それだと、それで他のMCをドラック&ドロップする事が困難になります。 微妙に動く程度で動きません。 startDrag(true);が競合してしまっている様です。 深度の上層部から下層部へいくつでもドラック&ドロップできたらいいなと思っています。 何か良い改善策はないでしょうか? どうぞ宜しくお願い致します。

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

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

  • ベストアンサー
noname#35109
noname#35109
回答No.2

>> 質問:MCを2つ以上ドラッグする方法 2つ以上ということは3,4,5,…個もあり,ということですよね。 >> 深度の上層部から下層部へいくつでもドラック&ドロップできたらいいな これはちょっと難解ですね… 勝手に 「深度の上層部も下層部もひっくるめていくつでもドラック&ドロップできたらいいな」 と解釈します。 #1 の方のおっしゃるように 「startDrag();」 複数のシンボルがある場合使えません。 したがって,いくつでも同時にドラック&ドロップする場合, ドラッグされるオブジェクト側も「startDrag();」は使えません。 また, 「on (press) { }」 や 「on (release) { }」 など、onイベントハンドラも複数のシンボルがある場合使えません。 深度が上の方が勝ちます。 したがって、ドラッグするムービークリップ側のスクリプトも次のような感じにするしかないと思います。 ボタンシンボルでは無理で,ムービークリップシンボルをドラッグというパターンです。 以下は,ドラッグする各ムービークリップに書くスクリプトです。 ・・・コピペ可・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ onClipEvent (load) { down_flag = 0; } onClipEvent (mouseDown) { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { down_flag = 1; dif_x = this._x-_root._xmouse; //※↓ dif_y = this._y-_root._ymouse; //※↓ } } onClipEvent (mouseUp) { down_flag = 0; } onClipEvent (mouseMove) { if (down_flag == 1) { this._x = _root._xmouse+dif_x; //※↓ this._y = _root._ymouse+dif_y; //※↓ } } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 「マウスダウンやアップしたときの条件によって、 変数 down_flag の値を 0 か 1 に切り換え、 down_flag の値が 1 のときだけムービークリップを動かす。」 というような仕組みです。 down_flag の値が 1 になる条件は、 マウスがダウンし,なおかつドラッグするムービークリップのエリアにマウスがヒットしたときです。 ムービークリップとマウスのヒット判定には,「hitTest」を使います。(下記参考URL) //※↓ についてですが, 変数 dif_x や dif_y を用意したのは,クリックしたポイントのままドラッグできるようにです。 マウスの位置にムービークリップの中心を持って来たい場合は,  dif_x = this._x-_root._xmouse; //※↓  dif_y = this._y-_root._ymouse; //※↓ の2行を削除し,  this._x = _root._xmouse+dif_x; //※↓  this._y = _root._ymouse+dif_y; //※↓ を  this._x = _root._xmouse;  this._y = _root._ymouse; のように変えてください。 しかし,実際にやってみたのですが, 同じ大きさの物をつかんだとき, 変数 dif_x や dif_y をはずして行くと,すごく扱いにくくなりました。 つまり上下のムービークリップどうしが剥がれなくなってしまいます。 === PS ======= 先日の御質問の件ですが, やはりあれいじょう回答出来ません。 この場を借りてお詫びいたします。

参考URL:
http://hakuhin.hp.infoseek.co.jp/main/as/hittest.html,http://livedocs.macromedia.com/flash/8_jp/main/00002475.html
sato777
質問者

お礼

大変滑らかに動作しました。 いつもありがとう御座います。 専門書やネットでも調べましたが、前例が出ていなかったため大変勉強になりました。 先日の件ですが、あちらにも書きましたがアドヴァイス頂いた内容からいろいろ推測することができ、 本当に感謝しております。 こちらこそ、説明不足と質問の仕方が悪いのとで 大変ご迷惑をおかけしました。 申し訳御座いません。 また何か御座いましたら、懲りずに宜しくお願い致します。

その他の回答 (1)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

同時にドラッグできるムービークリップは1つだけです。 あるムービークリップをドラッグ中( startDrag を実行中)に別のオブジェクトで startDrag を呼び出すと、前の startDrag は削除されて動かせなくなります。 気になるのはカスタムカーソルの移動方法ですが。 カスタムカーソルは startDrag を使わなくても作れます。 要するに、デフォルトのマウスカーソルを非表示にし、ムービークリップで作ったカスタムカーソルをマウスカーソルの位置に表示すればいいわけです。 仮に、ステージにカスタムカーソルのムービークリップ” cursor ”があるとします。 カスタムカーソルを表示するスクリプトは、大体、次のようなスクリプトになります。 このスクリプトはムービークリップ” cursor ”に設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  onClipEvent(load)  {   //デフォルトのカーソルを消す   Mouse.hide();   //カーソルの位置に移動   this._x = _root._xmouse;   this._y = _root._ymouse;  }  onClipEvent(mouseMove)  {   //カーソルの位置に移動   this._x = _root._xmouse;   this._y = _root._ymouse;   //表示を更新   updateAfterEvent();  } これならカスタムカーソルの移動に startDrag を使わないので、他のムービークリップで startDrag を呼び出してドラッグすることができます。

sato777
質問者

補足

お返事有難う御座います。 しかしながら、このスクリプトは昔から使い勝手の悪いスクリプトとして有名なのです。 テキスト入力が出来なかったり、Windowから外れると マウスポインタがそのつどずれ、ユーザーにストレスを 与えてしまいます。 ですが、お返事頂いた事、感謝致します。 有難う御座いました。

関連するQ&A

  • ScrollPaneからmcをドラッグして外に出したい

    たとえば50個のmcから好きな5つを選んで、順番に決められた場所へドロップできる swfムービーを製作しています。 50個のmcはswfムービーの領域には並べ切れなかったので、ScrollPane内に 並べようと考えました。Flashのライブラリウィンドウからステージ上に インスタンスをドロップできるのと似たインターフェイスです。 左側50%に“ドロップ領域”右側50%に“ScrollPane”を配置しました。 Flash MX 2004 Pro 環境で、_rootにScrollPaneを配置。縦方向にスクロールさせます。 そのcontentPathに設定したmc上に、50個のmc(obj_mc)をattachMovie()しました。  this.content.attachMovie("obj_mc",objName,objDepth); このobj_mcをドラッグし、左側の“ドロップ領域”(ScrollPaneの外)にドロップ したいので、obj_mcでstartDrag()を呼び出します。 しかしScrollPaneの外へドラッグしていくと、obj_mcはScrollPaneの“裏側”に 入ってしまい「ScrollPaneの外へ出す」ことは出来ません。 たとえばswapDepth(_root.getNextHighestDepth())しても、上には出ません。 これを回避して、外に出す為の考え方を、どなたか教えてもらえませんでしょうか? obj_mcのonPress時に、ScrollPaneから“切り離す”ことが出来ればよいのでは ないかとは思っているのですが…。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 複数の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
  • 外部ファイルを読み込んだMCをドラッグ&ドロップしたいんですが?

    flash(swf)で外部ファイルを読み込んだムービークリップ(MC)をドラッグ&ドロップで移動できるようにしたいんですが、どのようにすればできるでしょうか? 通常のライブラリなどに登録して表示させているMC(インスタンス名:photoL)は以下のようなASで処理できるんですが、外部ファイルを読み込んだMC(インスタンス名:photoF)では同じ書き方をしても表示はするんですが、ドラッグ&ドロップで移動できません。 --------------------------------------------------- photoF.loadMovie("test.jpg"); photoL.onPress = function(){ this.startDrag(false,v_leftLock,v_topLock,v_rightLock,v_bottomLock); }; photoL.onRelease = function(){ this.stopDrag(); }; photoL.onReleaseOutside = function(){ this.stopDrag(); }; photoF.onPress = function(){ this.startDrag(false,v_leftLock,v_topLock,v_rightLock,v_bottomLock); }; photoF.onRelease = function(){ this.stopDrag(); }; photoF.onReleaseOutside = function(){ this.stopDrag(); };

    • ベストアンサー
    • Flash
  • 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
  • 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を上に表示&色の変化

    先日、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
  • MCに設定したonPressを他のMCのASから実行する方法

    WIN XP Pro,FLASH8 Pro,FlashPlayer8の環境で開発しております。 質問です。 MCに設定したonPressを他のMCのASから実行する事は可能でしょうか? ステージ内に無数に配置したMC(インスタンス、インスタンス名共にそれぞれのMC毎に異なる)にonPressにて、ASを記載しておいたのですが、 Functionにしておらず、onPressしないと実行させられないため そのonPressによるASをすべてキーダウンのトリガーに変更させる場合、それぞれすべてのASを書き換える事は困難なので、別のMCからキーダウンをトリガーとして、onPressを実行させたいのです。 解説が解り難くて申し訳御座いませんが、噛み砕いて言いますと onPressと記載したMCを実際にクリックさせる事無く ASによってクリックする事(クリックした事)に出来ないかという事なのです。 ちなみに、MC.onPressの返す値をTraceしてみたのですが、Undefindでした。 MC.onPress=trueやMC.onPress=clickなどとしてもダメでした。 もしご存知の方がいらっしゃいましたら、是非ご教授頂ければ 幸いです。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Flash
  • レイヤーに配置されたムービークリップを削除したい

    Flash8を使っています。 シーン1とシーン2があり、それぞれのレイヤー上にMCが10個程並んでいます。シーンの切り替えはボタンで行います。 シーン1と2で必要なMCを画面上側にある選択領域(choice_MC)にドラッグするのですが、ドラッグ開始と同時にswapDepthsで深度空間に移動させ、シーンが変わっても消えないようになっています。 しかし、2つ問題点があり ● シーンを切り替えると、choice_MC上のMCと同じものが表示されてしまう。 ● choice_MC上になくてもドラッグしたMCはシーンを切り替えても表示されてしまう。 解決策として シーンを切り替えた際、choice_MC上のMCと同じ名前のMCは深度空間に移動させて消去する。 というようなことを考えていましたが、何か良い方法はないでしょうか? 何卒宜しくお願い致します。 

    • ベストアンサー
    • Flash
  • ドロップ先のターゲットパスの指定について.

    いつもお世話になっております.今回はドラッグ&ドロップに関して質問です.以下に記述されているASの間違った部分の修正をお願いします. やりたいことは「mc1~80をドラッグでき.back1~80のどれにでもドロップできる」といったことです. 現在,以下のASでうまく機能していることは,ドラッグ&ドロップできるがbcak1~80に吸着されない....といったところです. どうか解決のほどよろしくお願いします. for(i=0; i<=80; i++) { _root["mc"+i].onPress = function(){ this.startDrag (true); } } for(i=0; i<=80; i++) { _root["mc"+i].onMouseUp = function(){ if (this._droptarget == _root["back"+i]) { this._x = _root["back"+i]._x; this._y = _root["back"+i]._y; } stopDrag (); } } for(i=0; i<=80; i++) { _root["mc"+i].onMouseMove = function(){ updateAfterEvent(); } }

    • ベストアンサー
    • Flash
  • 2つのMC(ドラッグで移動可能)から等しい距離にMCを配置したい

    ドラッグで移動可能な二つのムービークリップMCAとMCBから等しい距離の位置に三つ目のムービークリップMCCを配置したいです。 MCCはMCA、MCBがドラッグで移動されると、MCAとMCBへの距離が等しい位置(厳密に等しくなくても良い)に移動させたいです。(結果、3つのムービークリップは一直線上に並ぶ) オーサリングツールは『ParaFla!』ActionSctiptは1.0相応で以下の様に作ってみましたが、いつまで経っても落ち着かないので改善したいです。 ※スクリプトのスペースは全角で記述。 ※ベクトルの計算に『HAKUHIN's home page』で公開されているライブラリを使用しました。 http://hakuhin.hp.infoseek.co.jp/main/as/vector.html ■ライブラリの取り込み _root上に配置したスクリプトに #FILE "vec2d.as" と記述。 ■MCA、MCB _root上にMCAを深度0、[固定]で配置。 _root上にMCBを深度1、[固定]で配置。 MCAとMCBにテキストで●を配置。 MCAとMCBに以下スクリプトを記述。 on (press){  this.startDrag(); // ドラッグを開始する } - on (release, releaseOutside){  this.stopDrag (); // ドラッグを解除する } ■MCC _root上にMCCを深度2に配置。 MCCにテキストで●を配置し、以下スクリプトを記述。 onClipEvent (enterFrame){  c_to_a = _root.Vec2dCreate(_root.MCA._x-_x,_root.MCA._y-_y);  c_to_b = _root.Vec2dCreate(_root.MCB._x-_x,_root.MCB._y-_y);  length_c_to_a=_root.Vec2dLength(c_to_a);  length_c_to_b=_root.Vec2dLength(c_to_b);  if(length_c_to_a > length_c_to_b){   long=c_to_a;  }else{   long=c_to_b;  }  pos_c = _root.Vec2dCreate(_x,_y);  long=_root.Vec2dNormalize(long);  long=_root.Vec2dScale(long, 5);  pos=_root.Vec2dAdd(pos_c,long);  _x=pos.x;  _y=pos.y; } 上記のようにして作成したものを以下に置きます。 http://carken.web.fc2.com/osiete/test.html 動かしてみると、いつまでたっても、細かく動いて止まってくれません。 厳密に同じ距離でなくても良く、ある程度見た目にOKかなってところで止まるようにしたいです。 アドバイスありましたら、よろしくお願いいたします。

    • ベストアンサー
    • Flash

専門家に質問してみよう