Actionscript AS2:围绕椭圆的吐温

Actionscript AS2:围绕椭圆的吐温,actionscript,actionscript-2,tween,Actionscript,Actionscript 2,Tween,我在舞台上有7部电影,我想从不同的起点绕着一个椭圆旋转。我做这件事有很多困难。。。。我首先使用了一个圆公式,然后用y值除以椭圆的宽度和高度。这种方法是可行的,但每次旋转后,y值都有点小。该代码是: 这个.x+=(数学cos(角度*数学PI/180)*半径); 这个._y+=(数学sin(角度*数学PI/180)*半径)/1.54 我也很难找到起始点的角度,如果它是关闭的,它们不会在同一个椭圆中移动,但它们都有不同的起始角度 有什么线索吗?使用以下代码段计算初始偏移量: // assuming y

我在舞台上有7部电影,我想从不同的起点绕着一个椭圆旋转。我做这件事有很多困难。。。。我首先使用了一个圆公式,然后用y值除以椭圆的宽度和高度。这种方法是可行的,但每次旋转后,y值都有点小。该代码是:

这个.x+=(数学cos(角度*数学PI/180)*半径); 这个._y+=(数学sin(角度*数学PI/180)*半径)/1.54

我也很难找到起始点的角度,如果它是关闭的,它们不会在同一个椭圆中移动,但它们都有不同的起始角度


有什么线索吗?

使用以下代码段计算初始偏移量:

// assuming you have your buttons in an array called buttons
for (var i:Number = 0; i < buttons.length; i++){
    buttons[i].angleOffset = 360 / buttons.length * i;
}

这几乎已经解决了,这段脚本将获取数组按钮的项目(可以添加任意数量的按钮),将它们围绕您设置的椭圆(原点+半径)隔开,并根据您设置的速度将它们围绕椭圆排列。唯一的问题是间距不均匀,有些很近,有些很远,我不明白为什么

var angle:Number = 0;
var originX:Number = 200;
var originY:Number = 200;
var radiusX:Number = 267.5;
var radiusY:Number = 100;
var steps:Number = 360;
var speed:Number = 3.1415/steps;
var buttons:Array = new Array(this.age,this.ethnicity,this.sex,this.social,this.ability,this.orientation,this.faith);

for (i=0;i<buttons.length;i++) {
buttons[i].onEnterFrame = function() {
    moveButtons(this);
    controllButtons(this);
};
buttons[i]._order = (360/buttons.length) * (i+1);
}
function moveButtons(e) {
    e._anglePhase = angle+e._order;
    e._x = originX+Math.sin(e._anglePhase)*radiusX;
    e._y = originY+Math.cos(e._anglePhase)*radiusY;
}

function controllButtons(e) {
    angle += speed;
    if (angle>=360) {
        angle -= 360;
    }
}
var角度:数值=0;
var originX:数值=200;
原始变量:数值=200;
var radiusX:Number=267.5;
变量半径Y:数值=100;
var步数:Number=360;
var速度:数字=3.1415/步;
变量按钮:数组=新数组(这个。年龄,这个。种族,这个。性别,这个。社会,这个。能力,这个。方向,这个。信仰);
对于(i=0;i=360){
角度-=360;
}
}

请注意,我将此脚本的基础转换为AS2,并使其从数组中工作。

我不太理解角度的部分,您希望它们均匀分布吗?是的,椭圆的角度在每个点上都不同,我需要找到每个点的角度,以便我知道在等式中从何处开始。这有什么意义吗?
var angle:Number = 0;
var originX:Number = 200;
var originY:Number = 200;
var radiusX:Number = 267.5;
var radiusY:Number = 100;
var steps:Number = 360;
var speed:Number = 3.1415/steps;
var buttons:Array = new Array(this.age,this.ethnicity,this.sex,this.social,this.ability,this.orientation,this.faith);

for (i=0;i<buttons.length;i++) {
buttons[i].onEnterFrame = function() {
    moveButtons(this);
    controllButtons(this);
};
buttons[i]._order = (360/buttons.length) * (i+1);
}
function moveButtons(e) {
    e._anglePhase = angle+e._order;
    e._x = originX+Math.sin(e._anglePhase)*radiusX;
    e._y = originY+Math.cos(e._anglePhase)*radiusY;
}

function controllButtons(e) {
    angle += speed;
    if (angle>=360) {
        angle -= 360;
    }
}