談Flash中的滑鼠響應
來源:互聯網
上載者:User
滑鼠|響應 大家都知道,Flash動畫能夠響應滑鼠動作,從而實現各式各樣的人機互動。常用的滑鼠都有左中右三個鍵。
1.左鍵
滑鼠左鍵在Windows系統下擔負著神聖的職責,在Flash中也不例外。Flash能夠自動捕獲滑鼠左鍵的動作,並根據捕獲的動作激發內建的滑鼠事件,再根據使用者為這些事件編寫的處理函數完成對滑鼠左鍵的響應。
按鈕和影片剪輯常常用來完成響應滑鼠與實現互動的過程。對於按鈕,可以用關鍵字on定義的事件處理函數來響應左鍵動作。其中,press表示左鍵按下的事件,release表示左鍵釋放的事件,releaseOutside表示在按鈕外部釋放左鍵的事件等等。例如,要使按鈕對單擊事件做出響應,可以在按鈕的動作面板中添加如下代碼:
on (release) {
trace("單擊了一下");
}
這樣,在測試狀態下單擊該按鈕時,Flash就會將資訊“單擊了一下”發送到輸出視窗。
對於影片剪輯,也可以為其添加on事件處理函數,使其以按鈕的機制響應滑鼠左鍵。此外,也可以用影片剪輯特有的onClipEvent事件處理函數對滑鼠左鍵做出響應。例如,mouseDown表示左鍵按下的事件,mouseUp表示左鍵抬起的事件。與按鈕的press和release事件不同的是,mouseDown和mouseUp事件不要求游標位於影片剪輯範圍內。因此,如果要判斷滑鼠具體單擊的哪個影片剪輯,還需要對滑鼠位置進行檢測。例如,下面的代碼使得影片剪輯響應左鍵按下事件並在輸出視窗中顯示光線標的位置:
onClipEvent (mouseDown) {
trace("X座標:"+_root._xmouse);
trace("Y座標:"+_root._ymouse);
}
這裡,_root._xmouse和_root._ymouse分別表示游標相對於主情境的X座標和Y座標,如果省略_root,則得到游標相對於影片剪輯自身的座標。
2.右鍵
滑鼠的右鍵和中鍵是Flash MX 2004新開放的功能。對滑鼠右鍵的響應主要體現在允許使用者自訂右鍵的捷徑功能表。
ContextMenu類表示捷徑功能表,ContextMenuItem類表示捷徑功能表中的功能表項目。如下所示的代碼建立ContextMenu類的一個對象my_cm:
var my_cm = new ContextMenu();
ContextMenu類的customItems屬性是一個數組,該數組包含了捷徑功能表中的所有功能表項目。要將功能表項目添加到菜單中,需要使用數組的push方法,如下所示:
my_cm.customItems.push(new ContextMenuItem("旋轉", func_rotate));
這樣,就將“旋轉”功能表項目添加到了捷徑功能表中,func_rotate是一個函數名,它決定了選擇“旋轉”菜單時所要執行的命令。下面定義該函數:
function func_rotate(obj:Object, menu:ContextMenu) {
obj.onEnterFrame = function() {
this._rotation += 15;
};
}
這裡的參數obj是系統自動捕獲並傳遞的,它就是對滑鼠右鍵做出響應並顯示捷徑功能表的對象。上面的函數使得選擇“旋轉”捷徑功能表時對象以15°/幀的速度進行旋轉。
3.中鍵
在Windows環境中,滑鼠中鍵常常用來滾屏——在使用Word的時候,瀏覽網頁的時候,甚至在一個下拉式清單方塊中做出選擇的時候——現在,也包括觀看Flash的時候。當然,這同樣也得歸功於Flash MX 2004。
表示滑鼠的Mouse對象中並未定義中鍵滾動事件,Flash MX 2004提供onMouseWheel接聽程式來檢測中鍵滾動。因此,要使得能夠對滑鼠中鍵的滾動做出響應,就必須向Mouse對象註冊onMouseWheel接聽程式。代碼如下:
mouseListener = new Object();
mouseListener.onMouseWheel = function(delta) {
clip_mc._x += n * delta;
}
Mouse.addListener(mouseListener);
其中,delta表示滑鼠中鍵的每個滾動刻度使螢幕滾動的行數,它的值由系統決定,常在1~3之間。上面的代碼使得在滑鼠中鍵滾動時,執行個體clip_mc一次向左或向右移n*delta像素,移動的方向是由中鍵滾動的方向決定的。