• ベストアンサー

MCを一定の間隔で吸着させたい?のですが

MC四角形が,ドラッグすることで,左右に動くようにしました。左右に動くときに一定の間隔で「止まる」というか「吸着する」ように設定するには,どのようなスクリプトが考えられるでしょうか。 動きとしては,複数の縦線のある表をその線上に来るたびに吸着する(止まる)感じにしたいのです。 環境 (XP,Flash8 初心者です。)

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

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

ネット上のFlash(SWF)サンプルでよく見る, 「ドラッグ&ドロップで,ドロップしたときに吸着させる」というものではなく, 「ドラッグの最中も吸着させる」というものですよね。 つまり,Flash作成ソフト上(FLAファイル上)での「グリッドに吸着」のような吸着のことだと思います(多分)。 基本的には, SWF流に複数の縦線をムービークリップで作成して, その縦線ムービークリップに,ドラッグするムービークリップを吸着させる。 という方法が簡単ではないかと思います。 スクリプト自体は違いますけど。 ステージ上にまず縦線を1本引いて,ムービークリップに変換し, そのムービークリップにインスタンス名を付けます。 例えば 「line_mc0」 というインスタンス名を付けたとします。 その「line_mc0」をコピペで増やし,違うインスタンス名を連番で付けます。 例えば「line_mc0」~「line_mc9」の10本のMCを用意したとします。  line_mc0 line_mc1 line_mc2 … … line_mc9    |      |      |         |    |      |      |         |    |      |      |         |    |      |      |         | そして,「MC四角形」にもインスタンス名を付けます。 この説明では,「drag_mc0」 というインスタンス名を付けたとしておきます。 そして_rootのフレームに次のように書きます。 /////////////////////////////////////////////////////////// // ドラッグしている MC の番号の初期値を設定 drg_num = -1; // マウス監視用のインスタンスを作成 mListener = new Object(); // マウスが動いたときの動作定義 mListener.onMouseMove = function() { // drag_mc? をマウスの座標と一致させる _root["drag_mc"+drg_num]._x = _root._xmouse; _root["drag_mc"+drg_num]._y = _root._ymouse; for (i=0; i<=9; i++) { // マウスのx座標が line_mc? の x座標の±5 内であれば if (_root._xmouse<_root["line_mc"+i]._x+5 && _root._xmouse>_root["line_mc"+i]._x-5) { // drag_mc? のx座標を line_mc? の x座標と一致させる。 _root["drag_mc"+drg_num]._x = _root["line_mc"+i]._x; } } updateAfterEvent(); }; // マウス監視用のインスタンスをマウスリスナーに登録 Mouse.addListener(mListener); // // drag_mc0 を押したとき _root.drag_mc0.onPress = function() { drg_num = 0; }; // drag_mc0 を放したとき _root.drag_mc0.onRelease = function() { drg_num = -1; }; _root.drag_mc0.onReleaseOutside = _root.drag_mc0.onRelease; /////////////////////////////////////////////////////////// 一応勝手に, // マウスのx座標が line_mc? の x座標の±5 内であれば if (_root._xmouse<_root["line_mc"+i]._x+5 && _root._xmouse>_root["line_mc"+i]._x-5) { で,ドラッグするMCが,線の ±5 以内に入れば吸着するようにしてありますが, この +5 や -5 を, +20 -20 のようにもっと大きな数にすれば吸着力はパワーアップします。 しかし,線と線の間隔の半分以下の数値にしてください。 そうでないと,思いもよらない線に吸着してしまいます。 また, ドラッグしたいものがたくさんある場合は, drag_mc0,drag_mc1,drag_mc2 … のように連番付きインスタンス名を付けて, それぞれのMC.onPress でその番号を drg_num に代入するようにしてやれば, ドラッグするMCも増やせます。  

calini501
質問者

補足

前回も教えていただきました。本当にありがとうございます。 今回の件ですが, スクリプトはうまくかけたようなのですが(エラーが出ないので),動作には反映されませんでした。 実は,”MC四角形”自体にスクリプトを書き込んでいるのが,それが悪いのでしょうか。 よろしければ,再度ご教授いただければと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#35109
noname#35109
回答No.3

#1です。 ご質問で書かれていらっしゃる, > 左右に動くときに一定の間隔で「止まる」というか「吸着する」 というものは, すでに 『ActionScript の startDrag や stopDrag から逸脱した勝手なもの』なのです。 そこをまず自覚してください。 『ActionScript の startDrag や stopDrag から逸脱した勝手なもの』 が悪い物であるという意味では決してありません。 『ActionScript の startDrag や stopDrag から逸脱した勝手なもの』 ほど,面白みがあってオリジナリティがある良い物に近い可能性があります。 しかし, 『ActionScript の startDrag や stopDrag から逸脱した勝手なもの』は, 『ActionScript の startDrag や stopDrag から逸脱した勝手なもの』ですから, そこを十分認識して,それなりの方法を自分で考えなければならないということです。 例えば, 「a=4,b=5 のとき a+b の解 x を 17,  a=5,b=5 のとき a+b の解 x を 8 ,  a=6,b=6 のとき a+b の解 x を 236 にしたい。」 と言っているようなものなのですよ。 そういうものに a=6; b=6; x=a+b; という ActionScript の加算演算子は使えませんよね。 最初から加算でも何でもないのですから,加算演算子を使うという発想に固執すること自体が間違っています。 そう言う勝手なルールがあるのなら,そういうルールでうまく行くように,自分なりにプログラミングしないと, 4+5=17,5+5=8,6+6=236 にはなりません。 a=6; b=6; if(a==4 && b==5){ x=17; } else if(a==5 && b==5){ x=8; } else if(a==6 && b==6){ x=236; } こうすれば,望み通りの解 x が求められます。 例が極端ですが,簡単に言うとそういうことです。 ~~~~~~~~~~~~~~~~~~~~~~ > _rootのフレームに書くと言うのは, > drag_mc0を置いているステージ上の > タイムラインのフレームにということですよね。 そうですね。 階層で言うなら,  _root(←このフレームに書く)   ├ drag_mc(ムービークリップのインスタンス名)   ├ line_mc0(       〃         )   ├ line_mc1(       〃         )   ├ line_mc2(       〃         )     …   └ line_mc9(       〃         ) ということです, 当然,ムービークリップには何も書かない方が良いですが。 しかし, ムービークリップに startDrag や stopDrag が書いてあっても,一応吸着の動作はしましたよ。 startDrag や stopDrag にじゃまされるので,不安定にはなりますが,一応吸着は効いていることは効いています。 ~~~~~~~~~~~~~~~~~~~~~~ #1 のスクリプトは基本的に startDrag や stopDrag は使いません。  マウスダウンした状態で,  マウスダウンされたムービークリップの座標をマウスの座標に一致させる。  ただし,  線の x座標にマウスが近い場合は,  ムービークリップの座標をその線の x座標 と一致させる。 という流れのスクリプトを考えて作ったのです。 結局,補足に書かれていらっしゃる > startDrag(this, false, 210.4, 198.1, 668.3, 198.1); このドラッグする範囲の制限があるために, startDrag や stopDrag を削除することができないということでしょうか? そうであれば,#1のスクリプトを次のように変えれば良いと思います。 /////////////////////////////////////////////////////////// // ドラッグしている MC の番号の初期値を設定 drg_num = -1; // マウス監視用のインスタンスを作成 mListener = new Object(); // マウスが動いたときの動作定義 mListener.onMouseMove = function() { // drag_mc? の x座標 をマウスの x座標 と一致させる _root["drag_mc"+drg_num]._x = _root._xmouse; // drag_mc? の y座標 を 198.1 にする(★ココ変更) _root["drag_mc"+drg_num]._y = 198.1; for (i=0; i<=9; i++) { // マウスのx座標が line_mc? の x座標の±5 内であれば if (_root._xmouse<_root["line_mc"+i]._x+5 && _root._xmouse>_root["line_mc"+i]._x-5) { // drag_mc? のx座標を line_mc? の x座標と一致させる。 _root["drag_mc"+drg_num]._x = _root["line_mc"+i]._x; } } // drag_mc? x座標が 210.4 未満であれば(★以下変更) if (_root["drag_mc"+drg_num]._x<210.4) { // drag_mc? のx座標を 210.4 にする。 _root["drag_mc"+drg_num]._x = 210.4; // drag_mc? x座標が 668.3 より大きい場合は } else if (_root["drag_mc"+drg_num]._x>668.3) { // drag_mc? のx座標を 668.3 にする。 _root["drag_mc"+drg_num]._x = 668.3; } updateAfterEvent(); }; // マウス監視用のインスタンスをマウスリスナーに登録 Mouse.addListener(mListener); // // drag_mc0 を押したとき _root.drag_mc0.onPress = function() { drg_num = 0; }; // drag_mc0 を放したとき _root.drag_mc0.onRelease = function() { drg_num = -1; }; _root.drag_mc0.onReleaseOutside = _root.drag_mc0.onRelease; /////////////////////////////////////////////////////////// 日本語で書くと,  マウスダウンした状態で,  マウスダウンされたムービークリップの座標をマウスの座標に一致させる。  ただし,  線の x座標にマウスが近い場合は,  ムービークリップの座標をその線の x座標 と一致させる。  ただし,  マウスダウンされたムービークリップ x座標が  210.4 未満 もしくは 668.3 より大きいとき,その範囲内に戻す。 という流れになります。 ムービークリップの,スクリプトは消してください。 吸着がわかりにくいときは, #1にも書きましたが,  // マウスのx座標が line_mc? の x座標の±5 内であれば  if (_root._xmouse<_root["line_mc"+i]._x+5    && _root._xmouse>_root["line_mc"+i]._x-5) { の 5 を 10 とか 20 にしてください。 「line_mc0」~「line_mc?」 の間隔がどうなっているかがわかりませんから, てきとうに 5 を入れているだけです。 あと,線のMC「line_mc0」~「line_mc?」のインスタンス名もまちがえずに付けてください。

calini501
質問者

お礼

おかげさまで,吸着を何とか確認することができました。 詳しいアドバイス本当にありがとうございました。 また何かありましたらよろしくお願いいたします。

calini501
質問者

補足

再三に渡る懇切丁寧なご教授,本当に本当にありがとうございます。 ご指示通りにスクリプトを書き直してみましたが, drag_mc0は動いてくれません。 ご指示されたスクリプトは,レイヤー「AS」を作りそこに全く同じように書き込みました。 インスタンス名も指示通りに付けてみましたが,だめです。 考えられることをもう少しやってみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
noname#35109
noname#35109
回答No.2

#1です。 書いたことを再び引用します。 > そして,「MC四角形」にもインスタンス名を付けます。 > この説明では,「drag_mc0」 というインスタンス名を付けたとしておきます。 > > > そして_rootのフレームに次のように書きます。 > > ///////////////////////////////////////////// > // ドラッグしている MC の番号の初期値を設定 > drg_num = -1; > // マウス監視用のインスタンスを作成

calini501
質問者

補足

再びのご教授ありがとうございます。思いつく点を修正しながら何度か試しているのですが,なかなかうまくいきません。 _rootのフレームに書くと言うのは,drag_mc0を置いているステージ上のタイムラインのフレームにということですよね。 私は,ここでは1フレームしか使ってないので,レイヤーASを作ってそこに書き込みました。 また,drag_mc0には次のようなスクリプトを書き込んでいます。 ////////////////////////////////////////////////////////////// on (press) { startDrag(this, false, 210.4, 198.1, 668.3, 198.1); } on (release) { stopDrag(); } onClipEvent (mouseMove) { updateAfterEvent(); } ////////////////////////////////////////////////////////// 分かっていない点が多々あり,そこが一番の問題なのだと心得ていますが,よろしければ,再度のご教授をお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MCを複数させると・・・

    Macromedia Flash MX2004を使用しています。 ActionScriptはまったくの初心者です; ビーズアクセサリーを自分でデザインするFlashを作ろうとしています。 ある領域に元々用意されているビーズのMCをドラッグしていくと、ビーズMCがその領域からドラッグした数だけMCが複数出てきます。 複数出てきたビーズMCを組み合わせてアクセサリーが出来ていくというものです。 今できているのはこちら↓ http://ribbon.chu.jp/flash/bi_zu.html 説明が難しいので、↑からDLして見ていただいてかまいません; 今、出しすぎてしまったビーズMCをゴミ箱に入れると削除される というのをやっているのですが、ActionScriptの記述の仕方がわかりません。 とりあえずMCをゴミ箱MCに入れると削除するやり方は分かるのでコピペしてやってみたのですが、 私が作っているFlashは、 Num++ [mc+Num] みたいにどんどん同じMCが複製されていくせいか、ゴミ箱MCに触れさせても正常に動作してくれません; もう一つ、MCを吸着するようにしたいのですが、これもやり方は分かるのですが複数MCが生成されるFlashなのでどのように記述すれば複数のMCを複数の別のMCに吸着させることができるのでしょうか?; 分かりにくい文章ですみません・・・ 本当に困っているので何かちょっとしたことでも分かる方いましたら教えてください。

    • ベストアンサー
    • Flash
  • 吸着後の事

    吸着後についてわからない事があります。 ドラッグ&ドロップでmaru_mcをsikakuというMCに吸着させています。 sikakuというMCに衝突していない時は指定座標に戻るようにしているのですが、二点うまくいかないところがあります。 吸着後、maru_mcをsikakuから離す時、maruがその場を動こうとしない時があり、すんなりドラッグできない。 maru_mcが、衝突していない時でも指定座標にもどらず、sikakuに吸着してしまう時があります。 改善点等たくさんあるとおもいますが、よろしくお願いします。 下記スクリプトです。 maru_mcのスクリプト on (press) { this.startDrag(); this.onEnterFrame = function() { if (this.hitTest(_root.sikaku)) { this._x += (_root.sikaku._x-this._x)/4; this._y += (_root.sikaku._y-this._y)/4; } }; } on (release, releaseOutside) { this.stopDrag(); this.onEnterFrame = function() { if (!this.hitTest(_root.sikaku)) { this._x += (400-this._x)/6; this._y += (300-this._y)/4; } else { this._x += (_root.sikaku._x-this._x)/4; this._y += (_root.sikaku._y-this._y)/4; } }; }

  • Ward2007の表の中の文字の間隔を変える方法

    普段の文字(行)と文字(行)の上下の間隔を変えるのは(行をドラッグして右クリック)→(段落)→(「間隔」の所を0行にして「行間」を「1行」に設定)で簡単にできるのですが、線が上下左右に入った表(罫線って言うのかな?)の中に入った文字の間隔を変えようとしても、同じように右クリックしても(段落)の文字が見当たりません。 表の中の文字(行)の間隔を変える(特に上下)のはどのようにすればよいのでしょうか? ちなみに私は超初心者です。よろしくお願いします。

  • mcの中のフレームラベルの移動

    初めまして。 当方初心者なので、よくわからないので、質問させていただきます。 外部にswfとしてフレームラベルの複数ついたものがあって、 それをmc(mcs_mc)で読み込みし、スクリプトで一定時間毎に mcに読み込んだ外部swfのフレームラベル(chapter1~chapter10)を移動させたいのですが、うまく動いてくれません。 どの用にしたらよいでしょう?よろしくお願いします。 onClipEvent(load){ this._lockroot = true; } onClipEvent(enterFrame){ setInterval( function(){ mcs_mc.gotoAndPlay("chapter2"); }, 1000); }

    • ベストアンサー
    • 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
  • 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
  • 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でムービークリップを常に上に表示する方法

    Flashの初心者で、次のことにつまずいています。 初心者のためにわかりやすく教えていただけたら助かります。 複数のムービークリップ(MC)があるとします。 その中のMCの1つをドラッグして他のMCに重なったときに、ドラッグしたMCが常に他のMCの上に表示されるようにしたいのですが・・・。 どのMCをドラッグした場合でも、他のMCの上に表示されるようにしたいです。 Flashのバージョンは、CS5.5で、アクションスクリプト2.0を使用しています。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 【AS3】指定範囲内でマウスから逃げるMC

    現在Flashサイトを製作中の者です。 ActionScript3.0についてご教授ください。 私のレベル:Flashを始めたばかりの初心者です。 使用環境:AdobeFlashCS5、ActionScript3.0 やりたいこと:マウスから逃げる個体MCを作りたい。 例1:マウスから逃げる動き(ttp://por.s54.xrea.com/lab/147/) 例2:沢山のドットがマウスを避ける動き(ttp://wonderfl.net/c/8vSO/) 自分で調べてみて上のようなサイトにたどり着きました。 厳密な伝え方が難しいですが、イメージとしては例1が近いかもしれません。 ・複数ではなく、個体MCで表現したい ・MCはステージ上に予め指定した範囲の外には出ていかない ・開始位置を指定したい こうした動きの場合、どのように記述すると良いのでしょうか。 こうした内容の本か、コードやサンプルがあるサイトを ご存知でしたらお知恵をいただけないでしょうか。 宜しくお願い致します。

  • マウスカーソルに応じたmcのスクロール(ループ型)

    マウスカーソルに応じて、複数配置してるmcがカーソルに合わせてスクロールして、ステージからはみ出したら、はみ出した側のステージの反対から出てくるっていうscriptを作ったのですが、うまくいきません。ループしてくれないんです。 ---- _root ---------------------- menu.mcというのがあり、そのmcの中にmenu01.mc、menu02.mc、menu03.mc・・・という感じでmcが配置してあります。menu.mc自体に別のスクリプト掛けてるので、こういう形にしてます。 ---- _root>menumc ---------------------- menu01.mcなどそれぞれのmenuのmcが入ってます。 さらに、それぞれのmcの中にscroll.mcというのをおき、そのscroll.mcにscriptが書いてあります。 ---- _root>menu.mc>menu01.mc 内scroll.mcのscript------ _visible = false; center = Stage.width/2; halfWidth = _parent._width/2; this.onEnterFrame = function() {  with(_parent){  //Scroll Speed   if (_root._xmouse<=180 || (_root._xmouse>250) && (_root._xmouse<=429)) {    moveX = (center-_root._xmouse)/15;   }else if(_root._xmouse>180 && _root._xmouse<=250){    moveX = 0;   }   _x = _x+moveX;   //Return Scroll   if(_x > Stage.width+halfWidth){    _x -= _width+Stage.width;   }else if(_parent._x < -halfwidth){    _x += _width+Stage.width;   }  } }; --------------------- で、これだときちんと思ったような動きでスクロールはするんですが、ただループしてくれないんです。しかもスクロールする毎にそれぞれのmcの間隔がずれてる気がします。最悪の場合だと、mcの上に別のmcが重なったりしてます。 なぜ、このような現象になってしまうのでしょうか?