下面對以上**作簡要說明:
(1)按照常規步驟建立並拷貝
matrix_rect
的matrx
,var mymatrix:matrix=matrix_rect.transform.matrix;
此處應該注意大小寫,
transform
內部並不存在
matrix
物件。matrix
是矩陣類的名字,
matrix
是例項的名字。在
as3中,這樣的情況俯拾皆是,一定要小心。
在編寫**時,一定要注意類的繼承關係。假如使用了
object
物件來宣告
mymatrix
,編譯時並不會報錯,但是在隨後執行將提示型別不匹配錯誤。
(2)建立好自定義矩陣物件之後,**需要計算
matrix_rect
的中心點座標,並將其移動到座標系原點:
var tempx
,tempy;
tempx=matrix_rect.x+matrix_rect.width/2;//
計算中心點x座標
tempy=matrix_rect.y+matrix_rect.height/2;//
計算中心點y座標
mymatrix.translate(-tempx
,-tempy);
此時的情形可參考圖:
(3)使用mymatrix.rotate()
方法將物件逆時針旋轉
45度。由於該方法的引數為弧度,所以**中進行了簡單數學轉換。因為
matrix_rect
的中心點已經移動到了座標原點,所以這次旋轉圍繞物件的中心進行。圖
演示的就是此時的情形。
(4)再次使用
matrix
類的translate()
方法把旋轉過的
matrix
移動到原來的位置。得到最終效果。
實際上,到這裡為止**並沒有影響
matrix_rect
及其顯示,所有的移動和旋轉都是對
mymatrix
進行的操作,得到的是乙個轉換運算矩陣。圖
8-6和圖
8-7是為了形象說明每條語句的作用而作的演示示例,並不會出現在舞台上。只有經過最後一句用
mymatrix
矩陣替換
matrix_rect
的內部矩陣物件之後,這些操作才真正作用到
matrix_rect
顯示物件上,並將最終結果(如圖
8-5)
顯示在舞台上。終端使用者只會看到居於舞台**的矩形圍繞中心旋轉了
45度。
屬性transform
中的成員都是唯讀的。所以
matrix
也不例外,可以更換但是不可以修改。在**中不能直接對
matrix_rect.transform.matrix
進行操作。如果嘗試以下**,編譯器將會顯示一條錯誤。
matrix_rect.transform.matrix.translate(-tempx
,-tempy);//
錯誤**
必須將transform
內部的物件或者
transform
物件本身拷貝到乙個副本裡,並對副本進行操作,然後用副本替換顯示物件的內部物件。這種用法容易引起困惑。可以理解
matrix
物件為乙個固化的機械零件,可以仿製並對仿製品進行改進,也可以用仿製的零件替換,但其本身不能拆解。
82 5 監控程序
列出某個程式程序所開啟的檔案資訊,顯示httpd程序現在開啟的檔案 lsof c httpd顯示多個程序命令用法 root netkiller lsof c smbd command pid user fd type device size off node name smbd 2506 root ...
CV大神講座感悟8 25
部落格做筆記,可以以後來翻看。這樣就留下了自己學習的記錄了,可能剛開始很簡單但是慢慢來逐漸積累自己的。遇到乙個問題怎麼解決 看書遇到問題就上網搜,谷歌 大神只是看書來培養起來。建議先看西瓜書,然後再看統計學習方法。實在看不懂,就看網路的 建議使用linux系統 資料收集的學習 網路選擇,是手機移動端...
825 適齡的朋友(字典)
1.問題描述 人們會互相傳送好友請求,現在給定乙個包含有他們年齡的陣列,ages i 表示第 i 個人的年齡。當滿足以下任一條件時,a 不能給 b a b不為同一人 傳送好友請求 age b 0.5 age a 7 age b age a age b 100 age a 100 否則,a 可以給 b...