• 締切済み

ステージ上でドラッグしたら回転する仕組みについて

flashとactionscript初心者です。 AS3.0を利用してステージまたは背景画像上でドラッグをすると ドラッグした距離に応じてその場で回転をするmcというオブジェクトを 作りたいのですが、どのようにすればよいでしょうか。 調べても類似のものが無く困っています。 説明が下手でわかりにくいとは思いますがご回答よろしくお願いします。 ※添付画像の指の部分はマウスカーソルとして考えてください 作業環境 Adobe Flash Professional CC

みんなの回答

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

これは,,, 説明の[例]が悪すぎて回答しにくいですね。。。  ◎ …MC(反時計回り)  → …マウスカーソルの動き ここまで "だけ" は理解できました。 しかし,  ◎  ← こんなときは MC を時計回りに回転させるのか? それとも MC を回転させないのか? また,  →  ◎ こんなときは MC を反時計回りに回転させるのか? それとも MC を時計回りに回転させるのか? また,  ◎↑ こんなときや  ↓◎ こんなときは MC を回転させるのか? それとも MC を回転させないのか? 以上のように色々な場合が考えられます。 とにかくスクリプトは 「そうなるように狙って考える」のです。 したがって今の状態では回答不可能か, スイカ割りのような当てずっぽうの回答しかできません。 ◎ 以下は当てずっぽう回答例です。 仮に マウスカーソルの位置には関係なく マウスカーソルの横向き方向のドラッグのみに対応して 右にドラッグすれば反時計回りに MC を回転させ 左にドラッグすれば時計回りに MC を回転させる。 というものとします。 MC には, ご質問の添付図にあるように 「mc」というインスタンス名が命名されていたとします。 また「mc」の "基準点(+印)" は 回転させたい位置(中央)にあるものとします。 その場合の タイムラインのフレームに書くスクリプト例です。 import flash.events.MouseEvent; //回転する割合を指定する変数 var rotate_rate:Number = 0.5; //ドラッグ開始座標を記録しておく変数の宣言 var start_x:Number; //回転終了時の回転角を記録しておく変数の初期化 var start_r:Number = mc.rotation; //マウスダウン時に関数 startRotation を実行 stage.addEventListener(MouseEvent.MOUSE_DOWN,startRotation); //関数 startRotation の定義 function startRotation(e:MouseEvent):void { //マウスダウンした座標を記録 start_x = stage.mouseX; //mc の回転角を記録 start_r = mc.rotation; //マウスムーブ時に関数 rotateMC を実行 stage.addEventListener(MouseEvent.MOUSE_MOVE,rotateMC); //マウスアップ時に stopRotation を実行; stage.addEventListener(MouseEvent.MOUSE_UP,stopRotation); } //関数 rotateMC の定義 function rotateMC(e:MouseEvent):void { //mc を回転させる mc.rotation = start_r-(stage.mouseX-start_x)*rotate_rate; } //関数 stopRotation の定義 function stopRotation(e:MouseEvent):void { //マウスムーブ時に実行する関数を解除 stage.removeEventListener(MouseEvent.MOUSE_MOVE,rotateMC); //マウスアップ時に実行する関数を解除 stage.removeEventListener(MouseEvent.MOUSE_UP,stopRotation); } これでムービーブレビューさせるとか パブリッシュすれば動作確認ができるかと思います。 なお, もし縦向きドラッグにも対応させるとか, その回転角度もキッチリとマウスの回転角に合わせるとか言うような場合は Math.atan2() などが必要になると思います。 数学的にハイレベルになり,高校数学の三角関数の理解は必要になります。 (上のスクリプトは小学算数か中学校1年生レベルの数学しか使っていません。) 「【Flash】Math.atan2で角度を求めるWonderfl-独学ActionScript」 http://d.hatena.ne.jp/ActionScript/20090409/as3_math_atan2 「chicken hearted signaler=[AS3]マウス座標との回転角度を計算。」 http://chsignaler.blog.fc2.com/blog-entry-7.html

関連するQ&A