從as3滑鼠事件說起

2021-09-24 17:44:21 字數 953 閱讀 8265

as3的滑鼠事件mouseevent有stagex,stagey屬性以及localx,localy屬性。之前以為localx和localy就是註冊事件偵聽器的物件左上角為原點的座標值,其實不然。localx localy和偵聽器放在**無關,只和滑鼠放在哪個物件上有關,即是發生事件的時候滑鼠所在物件的左上角為原點。

直接使用stagex和stagey的話,在父級剛好在舞台(0,0)位置的情況湊巧可行,但是父級一旦移動就對不上了,使用localx,localy獲得的座標自然是錯誤的。之後找到辦法是從父級的transform屬性中獲取concatenatedmatrix,即從父級sprite到舞台的變換矩陣。這個矩陣的(stagex,stagey)-(tx,ty)剛好得到正確的座標。

這個方法對於一般情況是可以了,不過我想得更**了一點,如果父級的變換矩陣中存在旋轉呢?給父級加上乙個rotation之後果然座標又對不上了。於是終極的解決方案來了。獲取父級的transform.concatenatedmatrix賦給m,m.invert()獲得逆矩陣,即從舞台座標系到父級座標系的變換矩陣。從stagex,stagey構建乙個point p,p=m.transformpoint(p);此時p的x,y就是滑鼠相對於父級的座標了,可以直接賦值給控制塊了。

mouse_move則是滑鼠在物件上移動就會觸發,值得注意的是偵聽stage的mouse_move事件,即使滑鼠出了舞台還是會觸發。 

mouse_over和roll_over,mouse_out,roll_out都是在滑鼠進出物件的時候觸發一次,顧名思義over是移入,out是移出。mouse和roll的區別在於,mouse_over mouse_out在進出物件的子物件時會觸發,而roll把元件和它的子級看做一體的,在進出子級物件的時候不會觸發。

這個問題更具體的實驗過程可以參見此貼:

as3按鈕事件

在剛開始學as3時,如果不知道按鈕的事件如onpress的話,實在是件很沒有頭緒的事情。在 as3.0中,所有的時間都已經被event統一管理了.相對as2.0來說,按鈕事件是在as3中變動最大的事件.在as3.0中例如onpress等以前的按鈕事件寫法已經基本退出了歷史的舞台.取而代之的是統一的管...

as3按鈕事件

在剛開始學as3時,如果不知道按鈕的事件如onpress的話,實在是件很沒有頭緒的事情。在 as3.0中,所有的時間都已經被event統一管理了.相對as2.0來說,按鈕事件是在as3中變動最大的事件.在as3.0中例如onpress等以前的按鈕事件寫法已經基本退出了歷史的舞台.取而代之的是統一的管...

as3按鈕事件

在剛開始學as3時,如果不知道按鈕的事件如onpress的話,實在是件很沒有頭緒的事情。在 as3.0中,所有的時間都已經被event統一管理了.相對as2.0來說,按鈕事件是在as3中變動最大的事件.在as3.0中例如onpress等以前的按鈕事件寫法已經基本退出了歷史的舞台.取而代之的是統一的管...