• ベストアンサー

ドラッグする記述

FLASH CS4 アクションスクリプト3.0で制作中です。 大変初歩的な質問なのですが、ムービークリップをドラッグする記述で困っています。 onDragを使用してひとつだけドラッグで動かすことはできたのですが、 他のムービークリップに同じ記述をすると 関数の定義が重複しています、とエラーが出てしまい、色々やってはみたものの対処法がわからず困っている次第です…。 大変お恥ずかしいですが、助言よろしくお願いいたします。 ちなみにドラッグしたいものがたくさんあるのですが(20個近く)、一挙に設定する方法はありますでしょうか。

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

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

> onDragを使用して ActionScript には onDrag などという言葉は存在しないので何のことかわかりません。 === === === 仮に,メインのタイムライン上にある 「mc0」, 「mc1」, 「mc2」 というインスタンス名を付けたMCを 一気にドラッグしたいとします。 その場合次のようなスクリプトをメインのタイムラインのフレームに書けば一応できます。 ///////////////////////////////////////////////////////////////////// // ドラッグ対象MCのインスタンス名登録用オブジェクトを作成 var name_obj = new Object(); // インスタンス名を登録(例「mc0」「mc1」「mc2」) for (var i:int=0; i<=2; i++) { name_obj["mc"+i]=true; } // ステージにイベントリスナーを登録(マウスダウン時,実行関数onDown) stage.addEventListener(MouseEvent.MOUSE_DOWN,onDown); // 関数 onDown の定義 function onDown(evt:MouseEvent):void { // マウス座標のPointインスタンス pos を作成 var pos:Point=new Point(stage.mouseX,stage.mouseY); // 配列 lst に pos の下にあるオブジェクトを取得 var lst:Array=stage.getObjectsUnderPoint(pos); // 配列 lst の要素数分 ループ for (i=0; i < lst.length; i++) { // obj に pos の下にあるインスタンスを1つずつ取得 var obj:DisplayObject=lst[i].parent; // もし obj の名前が name_obj に登録されていれば if (name_obj[obj.name]) { // そのMC内の変数 down_flg を true にする MovieClip(obj).down_flg=true; // そのMC内の変数に現在のマウスの座標を記録 MovieClip(obj).down_x=obj.mouseX; MovieClip(obj).down_y=obj.mouseY; } } // ステージにイベントリスナーを登録(マウスムーブ時,実行関数onMove) stage.addEventListener(MouseEvent.MOUSE_MOVE,onMove); } // 関数 onMove の定義 function onMove(evt:MouseEvent):void { // インスタンス名を登録した name_obj 内を捜査 for (var str:String in name_obj) { // もし登録インスタンス内の変数 .down_flg が trueであれば if (this[str].down_flg) { // マウスに合わせてそのMCの座標を移動 this[str].x=stage.mouseX-this[str].down_x; this[str].y=stage.mouseY-this[str].down_y; } } // 表示を即更新 evt.updateAfterEvent(); } // ステージにイベントリスナーを登録(マウスアップ時,実行関数onUp) stage.addEventListener(MouseEvent.MOUSE_UP,onUp); // 関数 onUp の定義 function onUp(evt:MouseEvent):void { // インスタンス名を登録した name_obj 内を捜査 for (var str:String in name_obj) { // 登録インスタンス内の変数 .down_flg を false にする this[str].down_flg=false; } // ステージのイベントリスナーを削除(マウスムーブ時,実行関数onMove) stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMove); } ///////////////////////////////////////////////////////////////////// インスタンス名がバラバラである場合は, // ドラッグ対象MCのインスタンス名登録用オブジェクトを作成 var name_obj = new Object(); // インスタンス名を登録 name_obj.ringo_mc = true; name_obj.mikan_mc = true; name_obj.ichigo_mc = true; のように全てを手動登録する必要があります。

yellow0315
質問者

お礼

お礼が遅くなってしまいました。 丁寧に回答いただきほんとうにありがとございました! 大きな勘違いをしていたようで;; 参考になりました。ありがとうございます^^

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

関連するQ&A

  • <Flash>ムービークリップにアクションスクリプトを記述できない。

    <ムービークリップ>インスタンスにアクションスクリプトを 記述するために、スクリプトペインを開くと、 「現在の選択範囲にアクションを割り当てることはできません」 と表示されます。 きちんとムービークリップ化していますし、 インスタンスも選択しています。 でもフラッシュを勉強して間もないので、 おそらく根本的ななにかに気づいてないのだと思います。 書籍に書いてある通りに作業を進めているのですが、 うまくいきません・・・。 書籍に付属しているサンプルデーターでは、 きちんとムービークリップにスクリプトが記述されています。 バカな質問になっているかもしれませんが、 宜しくお願いいたします。

  • Actionscript3.0の記述場所について

    Flash、Actionscript3.0独学の者です。 シーンを分けてFlashコンテンツを作成しているのですが、 全シーンに使う関数はどこに記述したらよいのでしょうか。 全シーンの1フレーム目に書いたら関数の定義が重複してしまいます。 初歩的な質問ですみませんが、よろしくお願いいたします。 ■開発環境 ・windows7 professional 64bit :・Adobe Flash CS6

    • ベストアンサー
    • Flash
  • Flashでムービークリップを常に上に表示する方法

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

    • ベストアンサー
    • Flash
  • インスタンス名に変数を代入 (Flash)

    複数個あるインスタンスをその都度変数を参照して希望する一つのムービークリップの可視、不可視を制御したいと思っています。 var Pagecount:Number = 0; 1フレーム目に↑を記述して変数を定義し、その変数の状態によってある希望するムービークリップの可視、不可視を制御したく、該当箇所に以下のようにASを記述しました。 (変数には条件によって1~50が代入されています。) btn_[Pagecount].visible = true; 上記の文ではエラーとなってしまいムービークリップを制御出来ませんでしたので どなたか正しい記述の仕方を教えていただけないでしょうか。 Flash、アクションスクリプト共に初心者の為、見当違いな記述をしているかと思いますが 解決策が分からず困っておりますので助けていただけましたら幸いです。 何卒、宜しくお願い致します。 ※AS3、Flash CS5、Mac環境となります。

    • ベストアンサー
    • Flash
  • ドラッグしたときの当たり判定

    ParaFlaを使ってFlashを制作しています aというスプライトをドラッグし bというスプライトにぶつかったらラベルCに飛ぶ というものを作りたいのですがうまくいきません aに記述しているアクションスクリプト on (press) { this.startDrag (true); } - on (release,releaseOutside) { this.stopDrag (); } - onClipEvent (enterFrame) { if(this.hitTest(_root.b) == true) { this.gotoAndPlay("c"); } } - onClipEvent (mouseMove) { updateAfterEvent(mouse); } バージョンはSWF8です ドラッグはできるのですがbとぶつかっても 何も起こりません bには何も記述していません どこを変更すればよいかわかる方 よろしくお願いします

    • ベストアンサー
    • Flash
  • カーソルのカスタム

    flash ver.9 AS2.0 使用です。 カーソルを自分で制作したムービークリップ(MC)にする方法を教えていただきたいです。 MCに直接スクリプト onClipEvent (mouseMove) { _x = _root._xmouse; _y = _root._ymouse; } を書く方法は分かるのですが、 知りたいのは フレームアクションで制御する方法です。 多分、とても初歩だと思うのですが、よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHで振り子風の移動スクリプトを教えて下さい

    こちらでは大変お世話になっております。 前回に引き続き移動のスクリプトを教えていただきたいのです。 ムービークリップをクリックすると、振り子のように1点は固定をしたまま右へ40度移動させる。次にクリックするともとの位置に戻る、次にクリックするとまた右へ40度、次はもとに戻る…。 というような、2つの地点を行き来するだけの動きにしたいのです。 on (release) { this._rotation -= 40; } ムービークリップに上のような記述をすると、1回目のクリックは良いのですが、2回目のクリックでそのまま40度ずつ回り続けてしまいます。クリックするたびに行って戻るだけの繰り返しができるアクションスクリプトを教えていただければと思います。 超初心者で勉強しはじめたところです。 どうかよろしくお願い致します。 アクションスクリプト2.0 FLASH CS5

  • インスタンス名の代入

    お世話になります。Action Script初心者です。 あるボタンをクリックすると、別のムービークリップのインスタンス名が 指定した名前になるようにしたいのですが、 どのようにしたらいいのか分かりません。 作業環境はFlash CS3 A.S.2.0 です。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flashアクションスクリプトで

    Flashアクションスクリプトで、Movieクリップにswfファイルを読み込む時に、swfファイルが表示されるMovieクリップの背景色ってどうやって帰られるのでしょうか?? よとしくおねがいしますm(__)m

  • ドラッグして四角形を切るFlashを教えてください。

    画面に名刺程度の四角形が表示されており、その四角形の上をドラッグすると、四角形に入る始点と、四角形を出る終点の座標をとって、その座標を結ぶ直線で、四角形を2つに切るFlashを制作したいと思っています。 制作方法やscriptのサンプルがある場所を教えてください。切る処理の似たようなFlashでもかまいません。 やっかいな質問だと思いますがよろしくお願いします。

    • ベストアンサー
    • Flash