こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

回転を使って、ハンドル操作をしたい

いつも、ありがとうございます。MACOSX、Flash8です。
ゲームの中で、ハンドル操作ができるようにしたいのですがなかなかうまくいかなくて困っています。
マウスの座標から、角度を出してrotationしたいのですが。
MouseDownで EnterFrame、マウスをドラッグしている間にカーソルに
合わせて回転してほしいのです。
1回転する必要はなく45度とー45度の間だけで動かします。
ハンドルのトップを0として、マウス座標から計算した角度をいれることによってできないかと思っているのですが、スクリプトがうまくかけません。
宜しく、お願い致します。

投稿日時 - 2006-12-18 01:54:50

QNo.2609249

すぐに回答ほしいです

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

#1です。

おおよそ言いたいことは伝わったようで嬉しい限りです。
そうです,そうです。
そういうようなこと(#1の補足に書いていらっしゃるようなこと)が書きたかったのです。
結局,サンプル FLA で言うと,必要な部分は「水色の矢印」だけです。


>> しかしここで問題が。角度の制限がうまくいきません。

こういう感じでいかがでしょうか↓?

-----------------------------------
onClipEvent (load) {
function kaiten() {
tmpX = xPos-this._x;
tmpY = yPos-this._y;
rad = Math.atan2(tmpY, tmpX)*180/Math.PI;
// ※数値を見る(ムービープレビュー検証用)
trace(rad);
// もし rad が -135 以下 または 90以上 であれば
if (rad<=-135 || rad>=90) {
// rad を -135 で固定
rad = -135;
// もし rad が -45 以上であれば
} else if (rad>=-45) {
// rad を -45 で固定
rad = -45;
}
this._rotation = rad+90;
_root.boat._x += this._rotation/100;
}
}
onClipEvent (enterFrame) {
//
// 範囲の変数化
extX = _root._xmouse-this._x;
extY = _root._ymouse-this._y;
//
// 元は extY<48 のものを extY<0 に変更してます↓
if (extX>-48 && extX<48 && extY>-48 && extY<0) {
xPos = _root._xmouse;
yPos = _root._ymouse;
this.onEnterFrame = kaiten;
//trace(this._rotation);
}
}
-----------------------------------

onClipEvent (enterFrame) 内の方は
特にさわる必要がなかったかもしれませんが,
if文入れ子がすごかったので,少し書き替えました。

function kaiten()
内の方が解答のメインです。

投稿日時 - 2006-12-18 19:35:22

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

ハンドルというのは,
画像系ソフト(Flashも含む)の図形の調整などに出てくるハンドル(○(丸)型が多い)ではなくて,
車のハンドルのことですよね。

ハンドルのTOPを 0 にするというか,
ハンドルのTOPを起点とし,
ハンドルの中央の回転軸を角度の 中心点として,
onRelease でハンドルのTOPをマウスに近づけるようにすれば比較的簡単にできませんでしょうか?
と,文字で書いても全然わかりませんよね。

言いたいのはコレですが↓。
「2つの角度の差を計算する」
http://hakuhin.hp.infoseek.co.jp/main/as/rotation.html#ROTATION_03


FLA ファイルの中身を見ていませんから,
上のサンプルが実際にどうなっているのかはわかりませんが,
なんかこれでできそうな気がします。

矢印の始点をハンドルの中心に置き換えて,
矢印の先端をハンドルのTOPに置き換えて,
ずっとマウス追従させるのではなく,onRelease で Flag を立ててそのFlagが立ったときだけマウス追従させて,_rotation の角度を±45度に制限する。

朝の時間の都合によりこの辺で...。

投稿日時 - 2006-12-18 07:26:14

補足

ありがとうございます。サンプル、見ました。
それとは、少々違いますが自力でなんとか下のようなスクリプトで動くようにしました。
ただし、マウスを押している間ではなくて、マウスがエリアないに入ったら
ハンドルを操作できるようにしました。操作にボートが左右に動きます。
しかしここで問題が。角度の制限がうまくいきません。
スクリプトは以下のようになっています。
onClipEvent (load) {
function kaiten() {
tmpX = xPos-this._x;
tmpY = yPos-this._y;
rad = Math.atan2(tmpY, tmpX)*180/Math.PI;
this._rotation = rad+90;
_root.boat._x += this._rotation/100;
}
}
onClipEvent (enterFrame) {
if ((_root._xmouse-this._x)>-48) {
if ((_root._xmouse-this._x)<48) {
if ((_root._ymouse-this._y)>-48) {
if ((_root._ymouse-this._y)<48) {
xPos = _root._xmouse;
yPos = _root._ymouse;
this.onEnterFrame = kaiten;
trace(this._rotation);
}
}
}
}
}

投稿日時 - 2006-12-18 11:36:48

お礼

すばらしい!ありがとうございます。やっと、すっきりしました。
radに固定だったのですね。rotationを制限しようとしていて
45度をこえるとくっついたまま動かなくて困っていました。
ifのまとめと範囲の変更もありがとうございます。
ifのまとめは、なかなかサンプルがなくていつもすごい入れこになって
わけわからなくなっていました。本当にいつもありがとうございます。
助かりました。

投稿日時 - 2006-12-19 10:26:22

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-