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);
4

2 に答える 2

3

モジュロ演算子()をいつでも使用%して、値を正に保つことができます。モジュールは、除算の残りを計算します。

例(例は、除算の整数で機能しますが、常に残りがあります。)

19 % 5 = 4

数195は3回しか収まらないため(3 * 5 = 15、、、、4 * 5 = 2020は高すぎる)、残りは4(19 - 15)です。それがモジュロです。

追加の例:

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

モジュロ演算の出力は、右辺の演算子よりも高くなることはありません-1。問題に最適です。

オブジェクトが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
于 2012-04-06T11:21:27.290 に答える
1

古典的な角度平均化の問題のように聞こえます。角度を平均化するために機能する式は次のとおりです

private function averageNums($a:Number, $b:Number):Number {
    return  = (Math.atan2( Math.sin($a) + Math.sin($b) , Math.cos($a) + Math.cos($b) ));
}
于 2012-04-06T04:46:08.130 に答える