我想创建一个简单的导弹对象,它以设定的速度移动并以给定的旋转速度朝特定目标旋转。但是,我无法弄清楚它的数学计算。到目前为止,这是我的代码:
private function enterFrame(e:Event):void {
// Rotate the missile towards the target.
var targetAngle:Number = getAngle(target.x, target.y, x, y);
if (targetAngle < 0) {
targetAngle += 360;
}
if (targetAngle - turnSpeed > rotation) {
rotation += turnSpeed;
} else if (targetAngle + turnSpeed < rotation) {
rotation -= turnSpeed;
} else {
rotation = targetAngle;
}
// Set the target point to move to based on angle and speed.
var newX:Number = x + Math.sin(degreesToRadians(rotation)) * speed;
var newY:Number = y + Math.cos(degreesToRadians(rotation)) * speed;
// Move to new location
x = newX;
y = newY;
}
private function getAngle (x1:Number, y1:Number, x2:Number, y2:Number):Number {
var dx:Number = x2 - x1;
var dy:Number = y2 - y1;
return (Math.atan2(dy,dx) * 180) / Math.PI;
}
private function degreesToRadians(degrees:Number):Number {
return degrees * Math.PI / 180;
}
我一直在尝试使用trace等调试它,但我似乎无法弄清楚问题出在哪里,很可能是因为存在很多问题而且我无法判断我是否修复了问题因为其他人正在掩盖它。我怀疑这个问题存在于旋转计算的某个地方,因为我很确定运动部分正常运作,但我不能肯定地说。
无论如何,无论我做什么,导弹似乎总是沿着随机的方向飞行,有时会向上直线向上,或者直接向下,或者只是在没有任何特别的情况下环绕。