2011-05-13 60 views
1

Im動畫精靈w javacript - 這些精靈包含一個容器DIV,firstChild是絕對定位的IMG。圖像由對象的16個垂直視圖/角度組成。當對象從A移動到B時,ATAN2函數會計算適合對象行進方向的style = top:值。除了精靈的另一個方面,這一切都可以工作 - 它們可以改變它們的大小。精靈的默認大小是24像素(寬),這對ATAN2有效,但一旦精靈變大,計算就會使精靈的幀條失調。下面是代碼,x1-y1是從和到的位置,而s是尺寸(寬度)。數值128是最大尺寸 - 和bracked值是允許的一個子畫面的最後計算假定此,然後計算用於與*(S/128)的實際尺寸...當縮放值時ATAN計算失敗

function P_angle(x1,x2,y1,y2,s) 
{ 
var v=parseInt(Math.atan2(x2-x1,y2-y1)/(Math.PI/180)+180) 
return (v>348.75?0:v>326.25?-128:v>303.75?-256:v>281.25?-384:v>258.75?-512:v>236.25?-640:v>213.75?-768:v>191.25?-896:v>168.75?-1024:v>146.25?-1152:v>123.75?-1280:v>101.25?-1408:v>78.75?-1536:v>56.25?-1664:v>33.75?-1792:v>11.25?-1920:0)*(s/128); 
} 
+0

由於方向與大小無關,因此v計算看起來不錯。第二行只是壞消息 - 無法讀取,效率不高,等等。那是什麼? – phkahler 2011-05-13 11:22:00

回答

1

在第一行你做一個浮點計算,並將結果傳遞給一個函數,期望一個字符串參數...您通過隱式轉換保存,但它很醜。

第二行中的巨大條件將角度調整到最接近22.5度的倍數,環繞並映射到128的負倍數,然後將其乘以s除以128 ...最初設計爲128像素精靈?無論如何,你就應該能夠做到這一點:

function P_angle(x1,x2,y1,y2,s) 
{ 
    return s*(Math.round(Math.atan2(x2-x1,y2-y1)*(8/Math.PI)-8)%16); 
} 

你不說的錯位有多大你的原代碼,但我懷疑它是通過劃分出128個因素,當舍入誤差造成的,你很幸運,所有的事情都是爲了24個像素精靈而圓滿的。在此版本中,您肯定會返回s的確切倍數。

+0

這是有道理的 - 生病給它一個嘗試,看看.... – 2011-05-16 08:52:57

+0

我試過了,它的工作原理 - 謝謝 - 堆棧...你救了我從一個阻力 – 2011-05-16 09:57:58

+0

哦親愛的 - 進一步測試你的公式後,我發現它從對象的起始位置越遠越不準確。如果啓動即將結束,則工作良好。 – 2011-06-02 20:17:35