小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Flash MX 2004 ActionScript圖文教程(九)

 昵稱3221608 2010-09-28
Flash MX 2004 ActionScript圖文教程(九)

2.2實(shí)例
  前面簡(jiǎn)要介紹了一下幾種常用的鼠標(biāo)事件,下面我們就通過(guò)一個(gè)完整的例子來(lái)綜合運(yùn)用一下這些事件。
  首先建立一個(gè)場(chǎng)景,向其中添加三個(gè)影片剪輯實(shí)例,名稱命名為hand_mc、message_txt、eventTrapper_btn和dragTest_mc,hand_mc用來(lái)替換鼠標(biāo)、message_txt是一個(gè)動(dòng)態(tài)文本,顯示反饋信息,eventTrapper_btn是按鈕實(shí)例,用來(lái)捕捉各種鼠標(biāo)事件,dragTest_mc則用來(lái)演示拖動(dòng)事件的處理。
  2.2.1自定義鼠標(biāo)
  我們經(jīng)常需要在Flash程序中使用自定義的鼠標(biāo)指針,下面在這個(gè)例子中,我們將把鼠標(biāo)指針換成自定義的外形。進(jìn)入主場(chǎng)景,選擇第一幀,在腳本面板中輸入以下的代碼:
  stop ();
  Mouse.hide();
  startDrag ("hand_mc", true);
  Message_txt.text = "開(kāi)始鼠標(biāo)事件試驗(yàn) ";
  第一句代碼是stop(),也就是讓影片播放到這里停下來(lái)一邊等待用戶的操作,Mouse.hide()隱藏鼠標(biāo)指針,緊接著startDrag則是開(kāi)始對(duì)影片剪輯實(shí)例hand_mc的拖動(dòng)操作,由于前面已經(jīng)將鼠標(biāo)指針隱藏,因此這個(gè)命令現(xiàn)在的作用相當(dāng)于將鼠標(biāo)指針替換為一個(gè)圖標(biāo)。注意看,startDrag后面有兩個(gè)參數(shù),第一個(gè)作用很明顯,就是將影片剪輯實(shí)例hand_mc作為拖動(dòng)對(duì)象,而后面的ture則是將影片剪輯實(shí)例的中心和鼠標(biāo)指針的中心鎖定起來(lái),如果設(shè)置為false,那么影片剪輯的中心將會(huì)和鼠標(biāo)在場(chǎng)景內(nèi)首次單擊的點(diǎn)的位置鎖定起來(lái)。在這個(gè)例子中,我們使用startDrag命令的目的是模擬鼠標(biāo)指針替換的效果,因此顯然應(yīng)當(dāng)設(shè)置這個(gè)參數(shù)為true。
  2.2.2捕捉并處理事件
  現(xiàn)在選中影片剪輯實(shí)例eventTrapper_btn,進(jìn)入腳本面板,在這里我們可以編寫(xiě)一系列的事件處理代碼。前面我們介紹了多個(gè)和鼠標(biāo)相關(guān)的事件,這里就將其一個(gè)個(gè)捕獲,注意觀察他們之間的異同。
  on (rollOver) {
  message_txt.text = "鼠標(biāo)浮動(dòng)事件";
  }
  on (rollOut) {
   message_txt.text = "鼠標(biāo)移出事件";
  }
  on (press) {
   message_txt.text = "鼠標(biāo)單擊事件";
  }
  on (dragOut) {
   message_txt.text = "鼠標(biāo)在當(dāng)前對(duì)象上按下左鍵后拖出";
  }
  on (release) {
   message_txt.text = "鼠標(biāo)釋放事件";
  }
  以上幾個(gè)是比較簡(jiǎn)單的事件,下面我們?cè)賮?lái)處理稍微復(fù)雜一些的事件。
  選擇影片剪輯實(shí)例dragTest_mc,然后再代碼面板中輸入這樣的代碼
  on (dragOver) {
   this._alpha = this._alpha - 10;
  }
  當(dāng)用戶按下鼠標(biāo)左鍵并在dragTest_mc上拖動(dòng)時(shí),這個(gè)事件內(nèi)部的代碼就會(huì)被執(zhí)行。this變量前面我們已經(jīng)打過(guò)交道了,它的作用就是引用當(dāng)前的對(duì)象(也就是dragTest_mc),_alpha是它的一個(gè)屬性,透明度,這里我們通過(guò)一個(gè)簡(jiǎn)單的運(yùn)算逐次降低其透明度,最終的效果類似于圖像被橡皮擦掉一樣。
  再選擇按鈕eventTrapper_btn,為其添加這樣的代碼:
  on (releaseOutside) {
   eventTrapper_btn._x = _root._xmouse;
   eventTrapper_btn._y = _root._ymouse;
  }
  這段代碼可以實(shí)現(xiàn)拖放效果,當(dāng)用戶在eventTrapper_btn上按下鼠標(biāo)左鍵并拖動(dòng),當(dāng)鼠標(biāo)在eventTrapper_btn外面釋放時(shí),releaseOutside事件就會(huì)發(fā)生,在這個(gè)事件中我們將eventTrapper_btn的位置(通過(guò)_x和_y坐標(biāo)來(lái)定義)設(shè)置為當(dāng)前鼠標(biāo)釋放時(shí)鼠標(biāo)所處的坐標(biāo)位置,按鈕就會(huì)移動(dòng)了。
  上面是通過(guò)鼠標(biāo)拖動(dòng)的方式移動(dòng)物體,下面再試試看用鍵盤(pán)來(lái)實(shí)現(xiàn),選擇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
  }
  這四個(gè)事件的作用是很明顯的,當(dāng)用戶按向左鍵時(shí)(發(fā)生keypress””事件),將eventTrapper_btn._x的值減小6個(gè)單位,以此類推,其他的代碼含義就不難理解了。
  2.2.3影片剪輯和按鈕
  從前面的實(shí)例可以看出,影片剪輯的實(shí)例也是可以擁有自身的事件處理代碼的。但是在使用影片剪輯實(shí)例事件時(shí)必須注意以下幾個(gè)問(wèn)題:
  我們可以為影片剪輯實(shí)例添加原本由按鈕捕捉的事件,比如rollOver、rollOut等等。不過(guò)要特別注意,影片剪輯實(shí)例雖然可以捕捉這樣的事件,但是在這些事件的處理中我們不能直接引用其他的對(duì)象,一般我們只對(duì)影片剪輯自身的屬性進(jìn)行修改,比如前面影片剪輯實(shí)例dragTest_mc處理事件就是一個(gè)例子。我們可以在這個(gè)事件的處理中修改影片剪輯實(shí)例dragTest_mc的透明度,但是不要指望在其中簡(jiǎn)單地加上message_txt.text=“”這樣的代碼就能修改反饋區(qū)的內(nèi)容。在執(zhí)行過(guò)程中,這樣的代碼是不會(huì)有效果的,而且Flash不會(huì)報(bào)錯(cuò),這經(jīng)常會(huì)讓初學(xué)者感到暈頭轉(zhuǎn)向。解決的方法有兩個(gè),一是用按鈕代替影片剪輯,其次是對(duì)上面的代碼進(jìn)行一下小修改,改成:_root.message_txt.text=””,這樣程序又能夠執(zhí)行。_root是Flash提供的一個(gè)內(nèi)置對(duì)象,通過(guò)它可以準(zhǔn)確地定位界面上的元素。
  當(dāng)某個(gè)影片剪輯實(shí)例被賦予了鼠標(biāo)事件之后,鼠標(biāo)指針在其上方會(huì)顯示為一個(gè)小手,為了避免這種情況出現(xiàn),可以讓它捕捉rollOver事件,并加入這樣的代碼。
  on (rollOver) {
  this.useHandCursor = false;
  }
  useHandCursor這個(gè)屬性就是設(shè)置當(dāng)鼠標(biāo)在當(dāng)前對(duì)象上懸浮時(shí)是否顯示手形指針,默認(rèn)值為true,也就是顯示手形指針,這里將其設(shè)置為false就不會(huì)顯示了。
  我們可以為按鈕實(shí)例指定名稱(后綴一般用_btn),不過(guò)不要有錯(cuò)覺(jué),按鈕實(shí)例和影片實(shí)例還是很多區(qū)別的。最重要的點(diǎn)就是,按鈕沒(méi)有自己的時(shí)間線,而影片剪輯則有自己的時(shí)間線。這是什么意思呢?簡(jiǎn)單地說(shuō),這點(diǎn)區(qū)別在this的使用上面體現(xiàn)出來(lái)。比方說(shuō),如果我們?yōu)橐粋€(gè)影片剪輯實(shí)例添加了這樣的事件處理代碼:
  on (press) {
  this._rotation = 30;
  }
  當(dāng)你在這個(gè)影片剪輯實(shí)例上單擊鼠標(biāo)左鍵時(shí),影片剪輯實(shí)例將會(huì)發(fā)生旋轉(zhuǎn)。但是如果你將這樣的代碼賦予一個(gè)按鈕實(shí)例,那么當(dāng)你單擊這個(gè)按鈕時(shí),將不會(huì)是按鈕自身旋轉(zhuǎn)而是按鈕的父對(duì)象旋轉(zhuǎn)。很多情況下,這種奇怪的現(xiàn)象會(huì)讓分不清按鈕實(shí)例和影片剪輯實(shí)例之間微小區(qū)別的用戶答感困惑。
  再來(lái)看一個(gè)前面舉過(guò)的一個(gè)例子
  on (releaseOutside) {
  eventTrapper_btn._x = _root._xmouse;
  eventTrapper_btn._y = _root._ymouse;
  }
  這行代碼中,你也許會(huì)覺(jué)得eventTrapper_btn._x這樣的語(yǔ)句太繁瑣,用this._x多方便直接呢?如果這段時(shí)間處理代碼是賦予影片剪輯實(shí)例的話,這樣做就沒(méi)有問(wèn)題,但是在前面的那個(gè)例子中,這段代碼是提供給按鈕實(shí)例使用的,所以必須清楚明白地講清楚移動(dòng)的對(duì)象,否則運(yùn)行的效果會(huì)和我們預(yù)先的設(shè)想大相徑庭。
  如果你需要使用一個(gè)影片剪輯代替按鈕的話,可以考慮在其內(nèi)部添加特殊的標(biāo)簽(_up、_over、_down),然后編寫(xiě)相應(yīng)的代碼。另外,每個(gè)按鈕都會(huì)有一個(gè)“熱區(qū)”,也就是單擊有效的區(qū)域,通常就是按鈕的圖形覆蓋的范圍,如果你需要修改這個(gè)區(qū)域的范圍可以使用影片剪輯實(shí)例的hitArea屬性,例如
  myClipButton_mc.hitArea = _root.myHitClip_mc;
  總的來(lái)說(shuō),按鈕夠?qū)崿F(xiàn)的功能,影片剪輯都能實(shí)現(xiàn),而影片剪輯能夠?qū)崿F(xiàn)的功能按鈕則未必能夠?qū)崿F(xiàn)。那還要按鈕有什么用?這主要是由于,按鈕是程序界面使用極其頻繁的元素,提供專門(mén)的按鈕類型可以提高設(shè)計(jì)的效率。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多