Flash MX 2004 ActionScript圖文教程(九)

來源:互聯網
上載者:User
教程   2.2執行個體
  前面簡要介紹了一下幾種常用的滑鼠事件,下面我們就通過一個完整的例子來綜合運用一下這些事件。
  首先建立一個情境,向其中添加三個影片剪輯執行個體,名稱命名為hand_mc、message_txt、eventTrapper_btn和dragTest_mc,hand_mc用來替換滑鼠、message_txt是一個動態文本,顯示反饋資訊,eventTrapper_btn是按鈕執行個體,用來捕捉各種滑鼠事件,dragTest_mc則用來示範拖動事件的處理。
  2.2.1自訂滑鼠
  我們經常需要在Flash程式中使用自訂的滑鼠指標,下面在這個例子中,我們將把滑鼠指標換成自訂的外形。進入主情境,選擇第一幀,在指令碼面板中輸入以下的代碼:
  stop ();
  Mouse.hide();
  startDrag ("hand_mc", true);
  Message_txt.text = "開始滑鼠事件實驗 ";
  第一句代碼是stop(),也就是讓影片播放至這裡停下來一邊等待使用者的操作,Mouse.hide()隱藏滑鼠指標,緊接著startDrag則是開始對影片剪輯執行個體hand_mc的拖動操作,由於前面已經將滑鼠指標隱藏,因此這個命令現在的作用相當於將滑鼠指標替換為一個表徵圖。注意看,startDrag後面有兩個參數,第一個作用很明顯,就是將影片剪輯執行個體hand_mc作為拖動對象,而後面的ture則是將影片剪輯執行個體的中心和滑鼠指標的中心鎖定起來,如果設定為false,那麼影片剪輯的中心將會和滑鼠在情境內首次單擊的點的位置鎖定起來。在這個例子中,我們使用startDrag命令的目的是類比滑鼠指標替換的效果,因此顯然應當設定這個參數為true。
  2.2.2捕捉並處理事件
  現在選中影片剪輯執行個體eventTrapper_btn,進入指令碼面板,在這裡我們可以編寫一系列的事件處理代碼。前面我們介紹了多個和滑鼠相關的事件,這裡就將其一個個捕獲,注意觀察他們之間的異同。
  on (rollOver) {
  message_txt.text = "滑鼠浮動事件";
  }
  on (rollOut) {
   message_txt.text = "滑鼠移出事件";
  }
  on (press) {
   message_txt.text = "按一下滑鼠事件";
  }
  on (dragOut) {
   message_txt.text = "滑鼠在當前對象上按下左鍵後拖出";
  }
  on (release) {
   message_txt.text = "滑鼠釋放事件";
  }
  以上幾個是比較簡單的事件,下面我們再來處理稍微複雜一些的事件。
  選擇影片剪輯執行個體dragTest_mc,然後再代碼面板中輸入這樣的代碼
  on (dragOver) {
   this._alpha = this._alpha - 10;
  }
  當使用者按下滑鼠左鍵並在dragTest_mc上拖動時,這個事件內部的代碼就會被執行。this變數前面我們已經打過交道了,它的作用就是引用當前的對象(也就是dragTest_mc),_alpha是它的一個屬性,透明度,這裡我們通過一個簡單的運算逐次降低其透明度,最終的效果類似於映像被橡皮擦掉一樣。
  再選擇按鈕eventTrapper_btn,為其添加這樣的代碼:
  on (releaseOutside) {
   eventTrapper_btn._x = _root._xmouse;
   eventTrapper_btn._y = _root._ymouse;
  }
  這段代碼可以實現拖放效果,當使用者在eventTrapper_btn上按下滑鼠左鍵並拖動,當滑鼠在eventTrapper_btn外面釋放時,releaseOutside事件就會發生,在這個事件中我們將eventTrapper_btn的位置(通過_x和_y座標來定義)設定為當前滑鼠釋放時滑鼠所處的座標位置,按鈕就會移動了。
  上面是通過滑鼠拖動的方式移動物體,下面再試試看用鍵盤來實現,選擇evnetTrapper_btn,為其追加這樣的代碼。
  on (keypress"") {
   eventTrapper_btn._x = eventTrapper_btn._x-6
  }
  on (keypress"") {
   eventTrapper_btn._x = eventTrapper_btn._x+6
  }
  on (keypress"") {
   eventTrapper_btn._y = eventTrapper_btn._y-6
  }
  on (keypress"") {
   eventTrapper_btn._y = eventTrapper_btn._y+6
  }
  這四個事件的作用是很明顯的,當使用者按向左鍵時(發生keypress””事件),將eventTrapper_btn._x的值減小6個單位,以此類推,其他的代碼含義就不難理解了。
  2.2.3影片剪輯和按鈕
  從前面的執行個體可以看出,影片剪輯的執行個體也是可以擁有自身的事件處理代碼的。但是在使用影片剪輯執行個體事件時必須注意以下幾個問題:
  我們可以為影片剪輯執行個體添加原本由按鈕捕捉的事件,比如rollOver、rollOut等等。不過要特別注意,影片剪輯執行個體雖然可以捕捉這樣的事件,但是在這些事件的處理中我們不能直接引用其他的對象,一般我們只對影片剪輯自身的屬性進行修改,比如前面影片剪輯執行個體dragTest_mc處理事件就是一個例子。我們可以在這個事件的處理中修改影片剪輯執行個體dragTest_mc的透明度,但是不要指望在其中簡單地加上message_txt.text=“”這樣的代碼就能修改反饋區的內容。在執行過程中,這樣的代碼是不會有效果的,而且Flash不會報錯,這經常會讓初學者感到暈頭轉向。解決的方法有兩個,一是用按鈕代替影片剪輯,其次是對上面的代碼進行一下小修改,改成:_root.message_txt.text=””,這樣程式又能夠執行。_root是Flash提供的一個內建對象,通過它可以準確地定位介面上的元素。
  當某個影片剪輯執行個體被賦予了滑鼠事件之後,滑鼠指標在其上方會顯示為一個小手,為了避免這種情況出現,可以讓它捕捉rollOver事件,並加入這樣的代碼。
  on (rollOver) {
  this.useHandCursor = false;
  }
  useHandCursor這個屬性就是設定當滑鼠在當前對象上懸浮時是否顯示手形指標,預設值為true,也就是顯示手形指標,這裡將其設定為false就不會顯示了。
  我們可以為按鈕執行個體指定名稱(尾碼一般用_btn),不過不要有錯覺,按鈕執行個體和影片執行個體還是很多區別的。最重要的點就是,按鈕沒有自己的時間軸,而影片剪輯則有自己的時間軸。這是什麼意思呢?簡單地說,這點區別在this的使用上面體現出來。比方說,如果我們為一個影片剪輯執行個體添加了這樣的事件處理代碼:
  on (press) {
  this._rotation = 30;
  }
  當你在這個影片剪輯執行個體上單擊滑鼠左鍵時,影片剪輯執行個體將會發生旋轉。但是如果你將這樣的代碼賦予一個按鈕執行個體,那麼當你單擊這個按鈕時,將不會是按鈕自身旋轉而是按鈕的父物件旋轉。很多情況下,這種奇怪的現象會讓分不清按鈕執行個體和影片剪輯執行個體之間微小區別的使用者答感困惑。
  再來看一個前面舉過的一個例子
  on (releaseOutside) {
  eventTrapper_btn._x = _root._xmouse;
  eventTrapper_btn._y = _root._ymouse;
  }
  這行代碼中,你也許會覺得eventTrapper_btn._x這樣的語句太繁瑣,用this._x多方便直接呢?如果這段時間處理代碼是賦予影片剪輯執行個體的話,這樣做就沒有問題,但是在前面的那個例子中,這段代碼是提供給按鈕執行個體使用的,所以必須清楚明白地講清楚移動的對象,否則啟動並執行效果會和我們預先的設想大相徑庭。
  如果你需要使用一個影片剪輯代替按鈕的話,可以考慮在其內部添加特殊的標籤(_up、_over、_down),然後編寫相應的代碼。另外,每個按鈕都會有一個“熱區”,也就是單擊有效地區,通常就是按鈕的圖形覆蓋的範圍,如果你需要修改這個地區的範圍可以使用影片剪輯執行個體的hitArea屬性,例如
  myClipButton_mc.hitArea = _root.myHitClip_mc;
  總的來說,按鈕夠實現的功能,影片剪輯都能實現,而影片剪輯能夠實現的功能按鈕則未必能夠實現。那還要按鈕有什麼用?這主要是由於,按鈕是程式介面使用極其頻繁的元素,提供專門的按鈕類型可以提高設計的效率。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。