• ベストアンサー

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

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

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

  • ベストアンサー
noname#35109
noname#35109
回答No.2

#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() 内の方が解答のメインです。

その他の回答 (1)

noname#35109
noname#35109
回答No.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度に制限する。 朝の時間の都合によりこの辺で...。

Flash-love
質問者

お礼

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

Flash-love
質問者

補足

ありがとうございます。サンプル、見ました。 それとは、少々違いますが自力でなんとか下のようなスクリプトで動くようにしました。 ただし、マウスを押している間ではなくて、マウスがエリアないに入ったら ハンドルを操作できるようにしました。操作にボートが左右に動きます。 しかしここで問題が。角度の制限がうまくいきません。 スクリプトは以下のようになっています。 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); } } } } }

関連するQ&A

専門家に質問してみよう