AS改變「註冊點」的方法

2022-09-10 19:03:19 字數 1401 閱讀 5450

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的區別外沒有不同。

flash動態改變註冊點

這是乙個動態改變註冊點的類package 設定顯示物件的屬性 public function flush prop string,value number void else if prop scalex prop scaley else mc prop value else 用法如下 在舞台上放個...

as3改變元件註冊點

flash和scaleform中,對顯示物件的形變 旋轉 縮放都是以註冊點為參考點的,如果註冊點位置不正確,就無法得到想要的效果。所以,有時候,我們可能會需要在as3中動態的修改元件如影片剪輯的註冊點。首先,註冊點位置是不可變的,固定為 0,0 改變註冊點是如此基本的東西,或許你認為 actions...

如何使用Matrix類來改變註冊點

做相簿功能時一開始最煩的就是註冊點在 0,0 的位置,為了能方便的旋轉 縮放操作,需要將註冊點移動到中心,參考雪 貓 的方法,做了簡化 var obj this.myimagebitmap 要改變的或影片剪輯 var matrix matrix obj.transform.matrix matrix...