很多人都研究過GL的Animation編輯器,但是對其XML資料檔案中Sprite的m00 m01 m02 m10 m11 m12我想並不是每個人都能弄的明白,其實他們是Java的映像變換類AffineTransform的6個參數。 AffineTransform是J2SE中非常重要的專門處理2D映像仿射變換的類,尤其在遊戲工具編寫中經常會用到。該類的建構函式有6個參數m00 m10 m01 m11 m02 m12,會構造一個矩陣[m00 m01 m02][m10 m11 m12][ 0 0 1 ]注意這6個參數的順序,CoCoMo曾經因為搞錯了參數的順序而得出了錯誤的結果,最鬱悶的是還被jedi忽悠說曾經有種Identity矩陣不是以[1 0 0][0 1 0][0 0 1]格式儲存的,誤導我半天沒有找到問題所在。 當構建出了該矩陣後,則平移時左乘一個平移矩陣[1 0 tx][0 1 ty][0 0 1]反轉X時左乘一個縮放矩陣[-1 0 0][ 0 1 0][ 0 0 1]反轉Y時左乘一個縮放矩陣[1 0 0][0 -1 0][0 0 1]旋轉時左乘一個旋轉矩陣[cos(theta) -sin(theta) 0][sin(theta) cos(theta) 0][ 0 0 1]然後將該矩陣setTransform到Graphics2D裡即可畫圖了。 要想得到變換後的資料,調用getMatrix得到一個double數組matrix,matrix[4]即X軸位移量,matrix[5]即Y軸位移量。假如matrix[0] < 0即反轉了X,matrix[3] < 0即反轉了Y。double degree = Math.toDegrees(Math.asin(matrix[1]));if(degree < 0) degree += 360;即可得到旋轉的角度。
原文:http://j2medev.spaces.live.com/blog/cns!8D09CFF9FE06ED5D!1065.entry