• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MOUSE_MOVE マウスの動きと同方向に動く)

AS3初心者のためのマウス移動と回転するスクリプト

このQ&Aのポイント
  • AS3初心者のためのマウス移動と回転するスクリプトについて説明します。
  • マウスを左右に動かすとムービークリップ(mc)が回転しますが、現在は右回転しかしません。
  • マウス右移動では右回転に、マウス左移動では左回転になるようにしたいですが、どうすればよいでしょうか。

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

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

前置きとして msg.text = String(event.delta); とは何でしょうか??? なぜそこにそんなもの(delta)がそこ登場するのかわからないので とりあえず上の1行は無かったものとして無視します。 > マウス右移動では、右回転に。 > マウス左移動では、左回転にしたいのですが・・・。 そう書かれましても 具体的にどのように動かしたいかによって 考え方やスクリプトは変わりますよ。。。 例えば次のような感じにしたいということでしょうか? //---スクリプト全文例---------------------- //過去のマウスの座標を保存する変数を用意 var old_mouseX:Number = stage.mouseX; //マウスが動いたときに以下の function を実行 stage.addEventListener(MouseEvent.MOUSE_MOVE, function(event:MouseEvent){ //現在のマウスの座標を取得 var new_mouseX:Number = stage.mouseX; //現在と過去のマウスの座標の差に適当な定数を掛けた値を取得 var rot_speed:Number = (new_mouseX - old_mouseX)*1.5; //「mc」の回転をその角度だけ加算 mc.rotation += rot_speed; //現在のマウスの座標を過去のマウスの座標として保存 old_mouseX = new_mouseX; }); //----------------------------------------- ※注 mc.addEventListener(Event.ENTER_FRAME, function(event){…}); の部分を書いていないのは, 省略しているわけではなくて,不要なので削除しています。     === === === === === === === === または, わざわざ mc.addEventListener(Event.ENTER_FRAME, function(event){…}); を用意されたのは 本当は回転する動きに重石を付けたかったからでしょうか? つまり 例えば次のような感じにしたかったのでしょうか? //---スクリプト全文例---------------------- //過去のマウスの座標を保存する変数を用意 var old_mouseX:Number = stage.mouseX; //回転の目標角度を入れる変数を用意 var target_rotation:Number = mc.rotation; //ダミーの角度を入れる変数を用意 var dummy_rotation:Number = mc.rotation; //マウスが動いたときに以下の function を実行 stage.addEventListener(MouseEvent.MOUSE_MOVE, function(event:MouseEvent){ //現在のマウスの座標を取得 var new_mouseX:Number = stage.mouseX; //現在と過去のマウスの座標の差に適当な定数を掛けた値を取得 var rot_speed:Number = (new_mouseX - old_mouseX)*1.5 ; //回転の目標角度をその角度だけ加算 target_rotation += rot_speed; //現在のマウスの座標を過去のマウスの座標として保存 old_mouseX = new_mouseX; }); //1フレーム進む時間ごとに毎回以下の function を実行 mc.addEventListener(Event.ENTER_FRAME, function(event){ //ダミーの角度を目標角度に 1/8 ずつ近づける dummy_rotation += (target_rotation-dummy_rotation)/8; //「mc」の回転をその角度にする mc.rotation = dummy_rotation; }); //----------------------------------------- ※注 rotation は -180~180 の間の角度になります。 したがって直接 mc.rotation を加算減算すると 回転する動きがおかしくなるので ダミーの角度を 加算減算 しておいた上で mc.rotation をそのダミーの角度にするようにしています。 以上, 具体的にどのように動かしたいかがわからなかったため 一応2つのスクリプト例を回答してみました。

koocom
質問者

お礼

BlurFiltan 様 動きました。 わざわざ2つもありがとうございます。上のスクリプトでOKです。 過去と今の座標を引き算するのですね。 勉強になります。 ありがとうございます。

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

関連するQ&A

  • MOUSE_DOWNとMOUSE_MOVEの併用

    こんにちは。 flash初心者なのですが、 マウスが押され且つ、ドラッグされている場合にだけ音が出るというフラッシュを作りたいのですが どこでどう定義すればいいのかわかりません。片方なら出来るのですが・・・ さらにMouseEvent.MOUSE_DOWNをMouseEvent.MOUSE_MOVEに書き換えると 1ピクセル動く毎にダダダダっと何度も連続して音が鳴ってしまいます 何卒ご教授お願いします。 var my_sound:My_Sound = new My_Sound(); var my_channel:SoundChannel; stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseLDownFunc); function MouseLDownFunc(event:Event):void{ my_channel = my_sound.play(); my_channel.addEventListener(Event.SOUND_COMPLETE,my_chan_comp); } function my_chan_comp(e:Event) { trace("再生終了"); my_channel = my_sound.play(); my_channel.addEventListener(Event.SOUND_COMPLETE,my_chan_comp); } stage.addEventListener(MouseEvent.MOUSE_UP, MouseLUpFunc); function MouseLUpFunc(event:Event):void{ my_channel.stop(); }

    • ベストアンサー
    • Flash
  • Flash(ActionScript3.0)

    Flash(ActionScript3.0)でゲーム制作を行っています。 ActionScriptもFlashも最近初めて触れた初心者で、分からないことがたくさん湧いてきて困っています。 よろしければご回答お願い致します。 インスタンスをドラッグすることができる、という要素と、 インスタンスをクリックすると45度回転する、という要素を同時に入れたいのですが、 同時にプログラムを組むとドラッグだけをすることができず、 どうしてもドラッグ後に45度回転してしまいます。 (プログラムのソースはネットから拾ってきたものです)。 どうすればドラッグと回転を分けることができるのでしょうか。 プログラム自体は以下のように組みました。 ご回答いただければ嬉しいです。 よろしくお願い致します。 //インスタンスの回転プログラム mc1.addEventListener(MouseEvent.CLICK, kaiten); function kaiten(event:MouseEvent) { mc1.rotation += 45; } //インスタンスのドラッグプログラム //インスタンスの0点からのマウス座標用変数 var mc1X:int; var mc1Y:int; //マウスがインスタンスを押したらsec1開始 mc1.addEventListener(MouseEvent.MOUSE_DOWN,sec1); //sec1 マウスダウン座標確認、sec2開始 function sec1(event:MouseEvent):void { mc1X = event.localX; mc1Y = event.localY; addEventListener(MouseEvent.MOUSE_MOVE,sec2); } //sec2 インスタンス移動 function sec2(event):void { mc1.x = mouseX-mc1X; mc1.y = mouseY-mc1Y; //低FPSマウス移動スムーズ対応 event.updateAfterEvent(); } //マウスが離れたらsec3開始 stage.addEventListener(MouseEvent.MOUSE_UP,sec3); mc1.addEventListener(MouseEvent.MOUSE_OUT,sec3); //sec3 sec2停止 function sec3(event):void { removeEventListener(MouseEvent.MOUSE_MOVE,sec2); }

  • 拡大するとマウスのローカル座標が変わってしまう

    ある四角形の左上から見たマウスの座標を取得したいと考えています。 四角形は移動したり回転させるので、ローカル座標を利用しようと思い、 次のコードを書きました。 mc_box.width = mc_box.width * 2; stage.addEventListener(MouseEvent.MOUSE_MOVE, function(){ mc_label.text = mc_box.mouseX.toString(); }); 一行目でmc_boxのサイズを拡大すると、表示されるmc_box.mouseXは 実際の半分のサイズになってしまいます。 回転させても四角形の左上隅が(0,0)になるようにしたいです。 どうすれば正しくマウスの座標を得られるのでしょうか?

    • ベストアンサー
    • Flash
  • ActionScript3.0の修正に関して

    下記スクリプトは、A_btnをマウスオーバーすると、mcを表示し、 A_btnをマウスアウトすると、mcを非表示にするというスクリプトです。 これのマウスオーバー、マウスアウトを クリックしたら表示し、もう一度クリックしたら非表示にするというものに 変更したいのですが、 単にMouseEvent.CLICKにすると動作しなかったので どなたか教えていただけないでしょうか? よろしくお願いします。 ---------------------- 環境 action script3.0 Mac OSX Flash CS4 ---------------------- var mc:Fukidashi = new Fukidashi(); A_btn.addEventListener(MouseEvent.MOUSE_OVER,xMouseOver); function xMouseOver(evt){ mc.alpha = 0; addChild(mc); mc.x = 0; mc.y = 0; mc.addEventListener(Event.ENTER_FRAME,imgAlpha); function imgAlpha(event:Event){ mc.alpha += 0.05; if (mc.alpha > 1){ mc.removeEventListener(Event.ENTER_FRAME,imgAlpha); } } } A_btn.addEventListener(MouseEvent.MOUSE_OUT,xMouseOut); function xMouseOut(evt){ removeChild(mc); mc.alpha = 0; }

    • ベストアンサー
    • Flash
  • actionscript3.0 rotationについて

    actionscript3.0 rotationについて btnを押すごとにmcを時計回りに90度減速させながら回転させたいと思っています。 しかし2回ボタンを押して180度回転させるまではうまくいくのですが 3回目に270度になると、回転がとまりません。 分岐させて、-90度回そうと思うと(当たり前ですが)逆回転してしまいます。 どのように記述すればよいでしょうか? よろしくお願いします。 以下スクリプトです。 var i:int=0; function onEnter(event:Event):void{ mc.rotation += (i-mc.rotation)*0.1; } addEventListener(Event.ENTER_FRAME, onEnter); btn.addEventListener(MouseEvent.MOUSE_DOWN, MouseLDownFunc); function MouseLDownFunc(event:MouseEvent):void{ i+=90; };

    • ベストアンサー
    • Flash
  • 画面をドラッグ

    ActionScript3.0で画面をドラッグして移動させるflashを作っています。 マウスを離してからも少しだけ動くように*2.75しています。 しかしhoge_mcが画面外に出た時にif文やflagを使って止めようとすると進む力が残っているっぽくて確実に止まってくれません。 どなたかこの問題の解決法が分かる方いませんか? *ソースです。(ステージにhoge_mcを置けば動きます。) import caurina.transitions.Tweener; var startX:Number = 0; var cameraRange:Number = 0; var tweenNum:Boolean =false; this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, onUp); function onDown(event:MouseEvent):void { tweenNum = false; this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove,false); startX = event.stageX; this.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove,false); } function onUp(event:MouseEvent):void { this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove,false); } function onMove(event:MouseEvent):void { trace(hoge_mc.x); if(tweenNum == true){ Tweener.removeTweens(hoge_mc); return; } var cameraIkata = event.stageX - startX; hoge_mc.x += cameraIkata; cameraRange = cameraRange + cameraIkata; Tweener.addTween(hoge_mc, {x:cameraRange*2.75, time:3, transition:"easeOut"}); startX = event.stageX; } stage.addEventListener(Event.ENTER_FRAME,loop); function loop(e:Event):void { if (hoge_mc.x > 401) { tweenNum = true; Tweener.removeTweens(hoge_mc); hoge_mc.x = 400.5; } if (hoge_mc.x < 0) { tweenNum = true; Tweener.removeTweens(hoge_mc); hoge_mc.x = 0.5; } }

  • マウスアウトで非表示にする

    シーン1に、mc(ムービークリップ)とcomment1(ムービークリップ)を配置 mcにマウスオーバーするとcomment1が表示される。 mcよりマウスアウトするとcommen1が非表示になる。 という感じにしたいのですが、マウスアウトしても非表示に出来ないで困っています。 //----------------------------------- MovieClip(root).comment1.visible = false; var pointX:Number=70; var pointY:Number=50; mc.addEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); function fl_MouseOver(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunc); function mouseMoveFunc(e:MouseEvent):void { MovieClip(root).comment1.visible = true; MovieClip(root).comment1.x=stage.mouseX+pointX; MovieClip(root).comment1.y=stage.mouseY+pointY; } } mc.addEventListener(MouseEvent.MOUSE_OUT, fl_MouseOver2); function fl_MouseOver2(event:MouseEvent):void { mc.removeEventListener(MouseEvent.MOUSE_OVER, fl_MouseOver); MovieClip(root).comment1.visible = false; } //-----------------------------------

    • ベストアンサー
    • Flash
  • フラッシュのマウスイベント

    フラッシュのマウスイベントがうまくいかないので教えてください。 ボタンはい列(5個)をしてそれぞれにインスタンスを付けました。 ロールオーバーで背景画像の入れ替えクリックで特定のURLへ飛びたいのですが 飛ぶことはできてもロールオーバーの記述がうまくいきません どう書けばいいのか教えてください 素人で説明見ながらなのでイフ とかエルスの使い方もよくわかりません。 ちなみに下記はクリックしたら出てきた記述で思い通りに動いています。 できたら出てくる画像がフェードインにしたいです 同じタイムラインに画像を配置してそれぞれMC-1とか名前も付けましたが 記述を探しても全くわかりません よろしくお願いします URL1.addEventListener(MouseEvent.CLICK,fl_ClickToGoToWebPage_5); function fl_ClickToGoToWebPage_5(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL2.addEventListener(MouseEvent.CLICK,fl_ClickToGoToWebPage_6); function fl_ClickToGoToWebPage_6(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL3.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_7); function fl_ClickToGoToWebPage_7(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL4.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_8); function fl_ClickToGoToWebPage_8(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL5.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_9); function fl_ClickToGoToWebPage_9(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); }

  • actionscript3.0について教えてください。

    actionscript3.0について教えてください。 Flash CS4で、マウスオーバーすると画像が表示するものを制作しました。 (全レイヤー、1フレーム目のみで制作していました) そして最近その以前制作したものの直前に別のムービーを入れることになり、 画像のように1フレーム目から4フレーム目まであけました。 そしてもともとあったフレームをすべて5フレーム目に移動しました。 すると、エラーが出るようになりました。 5フレーム目に移動するとエラーが出るようになってしまったので、 試しに2フレーム目、3フレーム目など試しましたが同じくエラーが出ました。 エラーの内容は TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at test_fla::MainTimeline/frame5() です。 下記のスクリプトを上から二つ目のレイヤーに記述しています。 一番上のレイヤーには、stop();と記述しています。 超初心者のため説明不十分かもしれませんが、宜しくお願いいたします。 /*ボタン1 */ nav1txt_mc.visible = false; nav1_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover); function onMouseover(e:MouseEvent):void{ nav1txt_mc.visible = true; nav1txt_mc.gotoAndPlay("nav1txt_mc"); } nav1_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay); function nondisplay(e:MouseEvent):void{ nav1txt_mc.visible = false; } /*ボタン2*/ nav2txt_mc.visible = false; nav2_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover2); function onMouseover2(e:MouseEvent):void{ nav2txt_mc.visible = true; nav2txt_mc.gotoAndPlay("nav2txt_mc"); } nav2_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay2); function nondisplay2(e:MouseEvent):void{ nav2txt_mc.visible = false; } /*ボタン3*/ nav3txt_mc.visible = false; nav3_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover3); function onMouseover3(e:MouseEvent):void{ nav3txt_mc.visible = true; nav3txt_mc.gotoAndPlay("nav3txt_mc"); } nav3_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay3); function nondisplay3(e:MouseEvent):void{ nav3txt_mc.visible = false; } /*ボタン4*/ nav4txt_mc.visible = false; nav4_btn.addEventListener(MouseEvent.MOUSE_OVER,onMouseover4); function onMouseover4(e:MouseEvent):void{ nav4txt_mc.visible = true; nav4txt_mc.gotoAndPlay("nav4txt_mc"); } nav4_btn.addEventListener(MouseEvent.MOUSE_OUT,nondisplay4); function nondisplay4(e:MouseEvent):void{ nav4txt_mc.visible = false; } 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • AS3.0 でフェードイン、

    AS3.0 でフェードイン、フェードアウトを繰り返したいんです。 _btnをマウスオーバーするとimg_mcがフェードインし、 _btnをマウスアウトするとimg_mcがフェードアウトするというものをつくりたいのですが、 下記スクリプトだと一通り動作を完了すると、ボタンにマウスを持っていっても反応しなくなります。 繰り返し動作させるにはどうしたらよいのでしょうか? var img_mc:MovieClip; img_mc.alpha = 0; _btn.addEventListener(MouseEvent.MOUSE_OVER,xClick0); function xClick0(evt){ img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha); function imgAlpha(event:Event){ img_mc.alpha += 0.05; //スピード if (img_mc.alpha > 1){ img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha); } } } _btn.addEventListener(MouseEvent.MOUSE_OUT,xClick); function xClick(evt){ img_mc.addEventListener(Event.ENTER_FRAME,imgAlpha2); function imgAlpha2(event:Event){ img_mc.alpha -= 0.05; //スピード if (img_mc.alpha == 0){ img_mc.removeEventListener(Event.ENTER_FRAME,imgAlpha2); } } }

    • ベストアンサー
    • Flash