到目前为止,我能够让一个叫做卫星的物体以椭圆的方式围绕另一个叫做炮塔的物体旋转。唯一的问题是,在卫星开始围绕炮塔旋转之前,它有一个初始位置(图 1)。然而,在第一帧之后,卫星从其初始位置移动到其他位置(图 2)。我试图让卫星从它的初始位置进入椭圆旋转,而不是让它移动到另一个位置,然后从那个新位置开始椭圆旋转。
图1 。. . . . . . . . . . . . . . . . . . 图 2
在第一帧结果位置 http://s1.postimage.org/xscznk8bz/After_Initial_Position.png
代码 :
private var fixedPoint1:int = 0;
private var fixedPoint2:int = 0;
private var currentDegrees:Number = 0;
private function onEnterFrame(event:Event):void
{
var dx:Number = turret.x - satelite.x; // This code deals with turret rotation
var dy:Number = turret.y - satelite.y; // So does this code
var angle:Number = Math.atan2(dy, dx); // As does this code
turret.rotation = (angle * 180 / Math.PI); // Finally done with turret rotation code
if (firstRun) {
currentDegrees = angle * 180 / Math.PI;
fixedPoint1 = satelite.x;
fixedPoint2 = satelite.y;
firstRun = false;
}
currentDegrees += 1;
var radians:Number = currentDegrees * Math.PI / 180;
var posX:Number = turret.x + Math.cos(radians) * (fixedPoint1);
var posY:Number = turret.y + Math.sin(radians) * (fixedPoint2);
satelite.x = posX;
satelite.y = posY;
}
我有点理解为什么它根据所使用的方程将卫星从初始位置移动到椭圆位置。我只是不知道如何编辑方程或变量以使椭圆“从”(也许包含更好的词)作为初始位置。
感谢您提供的任何帮助。
更新 :
此代码有效,但它类似于圆形轨道而不是椭圆轨道。
谢谢马库斯·贾德罗!
private function onEnterFrame(event:Event):void
{
var dx:Number = turret.x - satellite.x;
var dy:Number = turret.y - satellite.y;
var angle:Number = Math.atan2(dy, dx);
turret.rotation = (angle * 180 / Math.PI);
if (firstRun) {
currentAngle = (180 * Math.PI/180); // Start out at pi
// instead of 0 for some reason?
fixedPointX = turret.x - satellite.x; // xRadius = distance between turret.x and satellite.x
fixedPointY = turret.y - satellite.y; // yRadius = distance between turret.y and satellite.y
firstRun = false;
}
currentAngle += Math.PI / 180.0; // one degree
if (currentAngle > Math.PI) currentAngle -= 2.0 * Math.PI;
var cosAngle : Number = Math.cos(currentAngle);
var sinAngle : Number = Math.sin(currentAngle);
satellite.x = turret.x + cosAngle * fixedPointX + sinAngle * fixedPointY;
satellite.y = turret.y - sinAngle * fixedPointX + cosAngle * fixedPointY;
}