電子書籍の厳選無料作品が豊富!

AS3初心者です。

マウス移動するとムービークリップ(mc)が回転するスクリプトです。
下記では、マウスを左右どちらに動かしても右回転しかしません。
マウス右移動では、右回転に。マウス左移動では、左回転にしたいのですが・・・。

var rot_speed:Number = 0;

stage.addEventListener(MouseEvent.MOUSE_MOVE, function(event:MouseEvent){
rot_speed += event.stageX * 0.1;
msg.text = String(event.delta);
});

mc.addEventListener(Event.ENTER_FRAME, function(event){
rot_speed *= 0.3;
mc.rotation += rot_speed;
});

A 回答 (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つのスクリプト例を回答してみました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/09/10 20:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!