これまでのところ、サテライトと呼ばれるオブジェクトをタレットと呼ばれる別のオブジェクトの周りを楕円形に回転させることができます。唯一のことは、サテライトがタレットの周りを回転し始める前に、初期位置にあるということです(図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;
}
使用した方程式に基づいて、サテライトを初期位置から楕円形の位置に移動する理由を理解しています。方程式や変数を編集して、楕円を「開始」(おそらく包含がより適切な単語)の初期位置にする方法がわかりません。
提供された助けをありがとう。
アップデート :
このコードは機能しますが、楕円軌道ではなく円軌道に似ています。
Markus Jarderot、ありがとう!
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;
}