flash8以後版本AS改變“註冊點”的方法

以下文字爲代碼編寫人員而寫。
AS在flash8以後的版本中可以改變顯示元素的註冊點。在Flash8環境下,顯示元素特指MovieClip。這是因爲API中提供了Transform和Matrix。利用這兩個類可以幾乎任意的操作顯示元素的形狀。
以往的變形操作中,註冊點的概念僅在旋轉,縮放中有意義,平移不會影響註冊點。這樣,如果把註冊點設定爲左上角,則以旋轉爲例,不管怎麼平移,設置_rotation都是圍繞左上角的。
使用transform.matrix情況則不同。transform.matrix按照這個僅按照matrix對象的屬性設置顯示元素的位置。爲了描述方便,我在沒有進行操作之前,使用的顯示元素都是以左上角(0,0)爲註冊點。爲了使用方便,請你也這樣做。
matrix是一個矩陣
[a,b,tx
c,d,ty]
這個矩陣的工作是
dstX = srcX*a + srcY*c + tx;
dstY = srcX*b + srcY*d + ty;
我們現在不考慮tx,ty,如果請你找到一個縮放,旋轉都不會變化的點,這是哪一點?(0,0),這個就是註冊點。自定義的註冊點就是考慮tx,ty時的不變的點。
但是,如果數學基礎不好,比如我,要計算這樣一個點是很不方便的。所以我儘量使用API來簡化問題。
前面說過直接設置x,y,Flash8是_x,_y的位移是和註冊點無關的,而使用matrix.translate操作確是相關的,我要利用的就是這個特性,先做平移,然後旋轉或者縮放再平移回去。
//offset爲0時的例子
//!警告:x,y屬性不能自己設置,要平移必須使用translate!
//把註冊點設置爲中心
var halfW:Number = obj.width/2;
var halfH:Number  = obj.height/2;
//offset是當前剪輯的位置,現在要假設他們是0
var matrix:Matrix = obj.transform.matrix;
matrix.translate(-(halfW+offsetX),-(halfH+offsetY));
matrix.rotate(rad);
matrix.scale(xs,ys);
matrix.translate(halfW+offsetX,halfH+offsetY);
obj.transform.matrix = matrix;
現在解釋爲什麼不能設置x,y屬性。一上面的例子來說,請在每一次旋轉和縮放的前後觀察x,y屬性,發現他們是變化了的。說明x,y屬性被transform對象修改了,直接操作x,y相當於破壞transform的封裝。不幸的是得到的結果也是不正確的。
平移的時候,需要記錄offset,因爲已經看到代碼,offset是設置註冊點必須的量。
這次沒有源文件,Flash8和AS3除了使用_x,_y和x,y的區別外沒有不同。   
本文轉自:http://www.5uflash.com/flashjiaocheng/Flashaschengxu/410.html
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 1668
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章