2012-04-06 18 views
0

私は飛んでいると撮影しているオブジェクト(tempEnemyと呼ばれる)を得ました。 問題は、値tempEnemy.rotateToを正の値にすることができないことです。すなわち、 は0〜359度になります。現在のrotateToの範囲は、 rotateTo < 0(バグ)& & rotateTo> 0 & & rotateTo> 359(バグ)です。奇妙な回転値

tempEnemy.dX = tempEnemy.destX - tempEnemy.x; 
tempEnemy.dY = tempEnemy.destY - tempEnemy.y; 

//I added 180 because my tempEnemy object was looking and shooting to the wrong direction 
tempEnemy.rotateTo = (toDegrees(getRadians(tempEnemy.dX, tempEnemy.dY))) + 180; 

if (tempEnemy.rotateTo > tempEnemy.frame + 180) tempEnemy.rotateTo -= 360; 
if (tempEnemy.rotateTo < tempEnemy.frame - 180) tempEnemy.rotateTo += 360; 

tempEnemy.incFrame = int((tempEnemy.rotateTo - tempEnemy.frame)/tempEnemy.rotateSpeed); 

答えて

3

を角度です。モジュールは除算の残りの部分を計算します。

など。 (例では常に残された分割のためにそこ整数で動作します。)

19 % 5 = 4 

をので、数19 5で唯一4残さ(3 * 5 = 15 ,, 4 * 5 = 20 ,, 20が高すぎる)を3回にフィット(19 - 15)。それはモジュロです。

エクストラ例: - それはあなたの問題のために完全であるためにそこに1

7 % 3 = 1 
15 % 4 = 3 
21 % 9 = 3 

剰余演算の出力が右側のオペレータより高いことはありません。

オブジェクトが1234度回転している場合は、モジュロ360で操作して、0と360の間のそれぞれの数値を取得します。

1234 % 360 = 154 

他のより容易な例:

720 % 360 = 0 
360 % 360 = 0 
540 % 360 = 180 
-180 % 360 = 180 
-720 % 360 = 0 
-540 % 360 = 180 
+0

ありがとう!私はそれをしようと思います!:) – drpelz

1

古典的な角度の平均化問題のような音がします。ここでは平均化のために働くの式はあなたが常に正の値を維持するためにモジュロ演算子(%)を使用することができます

private function averageNums($a:Number, $b:Number):Number { 
    return = (Math.atan2(Math.sin($a) + Math.sin($b) , Math.cos($a) + Math.cos($b))); 
} 
+0

ありがとうございました!私はこれをチェックします!:) – drpelz

関連する問題