0

カーソルの位置に合わせて砲身が上下するゲームを作ろうとしています。

Barrel mc 内に挿入したコードは次のとおりです。

import flash.events.Event;
var hypotenuse,ratio,angleRad,angleDeg:Number;
stage.addEventListener(Event.ENTER_FRAME,spin);

function spin (e:Event):void{
    trace(mouseX+ " " + mouseY);
hypotenuse = Math.sqrt((mouseX)*(mouseX)+(mouseY)*(mouseY));
ratio = (Math.abs(mouseX))/hypotenuse;
angleRad = Math.asin(ratio);
angleDeg = angleRad*180/Math.PI;
if(mouseX >= 0 && mouseY <= 0 ){
    this.rotation = angleDeg;
}
if(mouseX >= 0 && mouseY > 0){
    this.rotation = (90-angleDeg)*2;
}
if(mouseX < 0 && mouseY > 0){
    this.rotation = angleDeg + 180;
}
if( mouseX < 0 && mouseY <= 0){
    this.rotation = (90-angleDeg)*2;
}
}

なんらかの理由で、バレルがぐるぐる回っているだけで、マウスが向いている方向でさえありません.. =/アドバイスや別のコーディングの提案が欲しいです。これは私がしばらく解決しようとしてきた問題ですそして、私は何が間違っているのかわかりません。

4

3 に答える 3

1

他の2人が言ったように、最善の方法はatan2を使用することです. あなたも結果をたどったので、私の推測では、mouseX と mouseY が大砲に対する相対的な位置を示していると思います。

それが想定されると、あなたはただ呼び出すことができますangleRad = atan2(mouseY, mouseX)

これにより、0 と Math.PI の間の角度が得られます。degAngle = angleRad/Math.PI*180度で与えます

そこから、角度が 0 から 180 の間 (mouseY>0) であるかどうかをテストでき、次のような結果が得られます。

if mouseY<0 then
    angleDeg-=180; //since rotation is optimized for -180<angle<180 afaik
end if
this.rotation = angleDeg;

けいれんはおそらく、(90-angleDeg)*2基本的に 180-2*angleDeg に変換されるためです。

編集:回転に基づいてオブジェクトの x/y 座標が変化することによってジャークが発生していないことは確かですか? 対角線は側面よりも大きくなるため、スプライトを回転させると X/Y が変化し、新しい角度が計算されて回転し、... 急に動きます。

ほとんどの場合、計算には常に中心点 (x+幅/2 および y+高さ/2) を使用する必要があります。

于 2013-05-31T12:58:17.327 に答える
0

水平線 (デフォルト: 東向き) とバレル ベースとマウス位置の間の線の間の角度を見つける必要があります。したがって、最初に動かず、水平線に沿ったエンティティ (ヒント: ステージ) に対するバレルの位置を取得し、次にステージに対するマウスの位置も取得してから、Y と X を減算し、呼び出しMath.atan2()てラジアンから度に変換します。すべきです。コードは Barrel 内からのものです。

var barrelPoint:Point=this.LocalToGlobal(new Point());
var angle:Number=Math.atan2(e.stageY-barrelPoint.y,e.stageX-barrelPoint.x);
this.rotation=angle*180/math.PI;
于 2013-05-31T09:49:50.763 に答える
0

2 点間の角度を取得するには、x と y の距離を計算します。

ydiff = y2 - y1
xdiff = x2 - x1

atan2次に、とydiffを見つけますxdiff

Math.atan2(ydiff,xdiff)

バム!ポイント 1 とポイント 2 の間の角度を取得しました。おそらくラジアン単位なので、最初に変換します。

于 2013-05-31T09:02:06.170 に答える