2011-06-14 81 views
0

我在舞臺上有7個影片剪輯我想從不同的起點開始補間一個橢圓。我在做這件事情時遇到了很多麻煩......我首先使用了一個圓圈公式,然後將y值除以高度上的橢圓寬度。這種工作方式,但在每次輪換後,y值都是小數。該代碼是:AS2:橢圓周圍的吐溫

this._x + =(Math.cos(angle * Math.PI/180)* radius); this._y + =(Math.sin(angle * Math.PI/180)* radius)/1.54;

我也很難找到起點的角度,如果它關閉,它們將不會在同一個橢圓中傳播,但它們都有不同的起始角度。

任何線索?

+0

我真的不明白關於角度的部分,你希望它們均勻間隔嗎? – grapefrukt 2011-06-15 14:26:15

+0

是的,每個點的橢圓角度是不同的,我需要找到每個點的角度,所以我知道從哪裏開始。這有任何意義嗎? – 2011-06-16 08:09:12

回答

2

計算使用這個片段的incidvidual偏移:

// 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; 
} 

設置的位置,而不是移動的每次更新,這樣你不會得到任何漂移。 使用此代碼更新每個對象,遞增angle var使其旋轉。

this._x = offsetX + Math.sin((angle + angleOffset) * Math.PI/180) * radius; 
    this._y = offsetY + Math.cos((angle + angleOffset) * Math.PI/180) * radius/1.54; 
+0

謝謝你這很好地解決了漂流問題。 – 2011-06-16 08:21:41

+0

用偏移代碼更新 – grapefrukt 2011-06-16 11:29:12

0

這幾乎是soved,這一段腳本將採取陣列按鈕的周圍設置了橢圓形的項目(可以添加你想要的),空間他們(產地+半徑),和吐溫他們根據你設定的速度在它周圍。唯一的問題是間距不均勻,有些距離很近,有些距離很遠,我不明白爲什麼。

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; 
    } 
} 

請注意,我得到這個腳本的基地http://www.actionscript.org/forums/showthread.php3?t=161830&page=2它轉化爲AS2,並使其從一個陣列工作。