2011-06-21 68 views
1

我正在拍攝一張精靈表並將它分解成一個數組。然後,我將該陣列按照一定的粒度旋轉,並將其推到陣列的末端,以便預烘烤旋轉以便更快地繪製(無硬件加速)。最後的結果看起來是這樣的:計算陣列中的索引幫助算法

array[0] = frame1 of the animation 
array[1] = frame2 of the animation 
array[2] = frame3 of the animation 
array[3] = frame1 of the animation rotated at 45 degrees 
array[4] = frame2 of the animation rotated at 45 degrees 
array[5] = frame3 of the animation rotated at 45 degrees 
array[6] = frame1 of the animation rotated at 90 degrees 
... etc 

所以現在我想拿出與該會在合適的粒度返回正確的元素對於任何角度的功能。例如,假設我的遊戲中的對象當前旋轉了30度並且位於動畫的frame1上,我想要array [3]。如果我在動畫的frame2上,我會想要array [4]。如果對象被旋轉了80度並且在frame1上,我想要array [6],依此類推。

這些是我有常量: 動畫幀(預旋轉) 動畫幀(旋轉後) 的旋轉的粒度(從1到360,即,45粒度會的#的#是上面的例子)。

這是函數的計算框架簽名: function calculateImageIndex(animationFrame : Number, currentAngle : Number) : Number

如何計算這個任何想法?我很難過。

回答

3
nf: total number of frames 
gr: granularity of rotation 
r: actual angle of rotation 
f: actual frame number 

i = round(r/gr) * nf + f - 1 
+0

嘿,查爾斯,謝謝你的刺傷。 nf是否是旋轉之前或之後的幀數?我似乎無法讓它與任何工作,但它可能有助於以正確的方式指導我。 –

0

N =幀(預旋轉) 克=旋轉粒度 r旋轉的=實際角度 F =實際幀

我認爲這些是需要和被賦予的常數數。

我們要做的第一件事就是找到旋轉的次數,以達到所需的角度。在上面的例子中,角度45是1轉。 90度= 2轉等等。設R =旋轉次數。

R = r/g這應該總是一個整數,因爲你永遠不需要一個不適合你使用的小費的角度。

接下來我們將計算該輪轉「組」的起始索引。在上面的例子中,第一組旋轉爲0的組將從索引0開始。45或者1旋轉將從索引3開始。依此類推。爲此,我們需要將旋轉數(R)乘以預旋轉幀數(n)。令j =該輪換組的起始索引。 j = R * n

最後一步是要弄清楚爲了達到您想要的框架,您必須添加多少到起始索引(j)。我將假設第一幀的編號爲1,如上例所示,但如果第一幀編號爲0,則在算法中刪除-1。讓我=最終的指數。 i = j +(f - 1)

我將成爲您正在尋找的索引。把它放在一個算法中看起來就像這樣。

I =((R/G)* N)+(F - 1)

希望這有助於!讓我知道你是否需要我澄清任何事情。