电竞比分网-中国电竞赛事及体育赛事平台

分享

Flash MX 2004 ActionScript圖文教程(十二)

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

2.4影片剪輯事件
  相對于前面所介紹的鼠標(biāo)事件、鍵盤事件以及幀事件而言,影片剪輯事件則顯得稍為有點難懂。當(dāng)我們將一個影片剪輯放到場景中時,他就成了一個“事件發(fā)射器”,不斷地報告自己的運行狀態(tài),如果我們捕獲這樣的事件,就可以做出相應(yīng)的反應(yīng)和處理。影片剪輯有多種,下面分門別類地加以介紹。

  2.4.1onClipEvent(Load)和onClipEvent(unload)
  這個事件在影片剪輯加載的時候發(fā)生,那什么是影片剪輯的加載呢?比方說,你在場景中添加了一個影片剪輯clip_mc,并讓他在第10幀的時候出現(xiàn)影片中,那么第10幀的時候它就會觸發(fā)這個事件。要想處理這個事件可以選擇影片剪輯clip_mc,然后在下面的腳本面板中輸入這樣的代碼(通常用來對影片剪輯進(jìn)行初始化):

  onClipEvent(Load)

  {

  }

  onClipEvent(unload)的作用和onClipEvent(load)的作用恰好相反,當(dāng)影片剪輯消失的時候,這個事件就會發(fā)生。

  2.4.2OnClipEvent(enterFrame)
  enterFrame事件會隨著影片的播放而不斷發(fā)生,影片每前進(jìn)一幀,影片剪輯就會觸發(fā)一次enterFrame事件。假設(shè)影片的播放速率為每秒20幀,那么這個事件就會以每秒20次的速率不斷產(chǎn)生。你一定會問,這樣的事件有什么作用?其實在影片剪輯事件中,enterFrame應(yīng)該說是最常用的,因為他可以用來制作相當(dāng)復(fù)雜的動畫。比方說,我們要制作一個炸彈從空中不斷翻滾落下的動畫可以按照這樣的步驟來執(zhí)行:首先建立一個影片剪輯作為炸彈,將其拖放到場景中建立影片剪輯實例,讓這個實例捕捉enterFrame事件,并為其設(shè)計這樣的代碼:

  onClipEvent(enterFrame)

  {

  this._Roation+=10;

  this._y+=10;

  }

  這段代碼的意思就是,每隔一幀將影片剪輯(this)旋轉(zhuǎn)10度,同時沿縱向移動10個單位。這里用到了一個“+=”運算符,可能有點容易讓人感到困惑,其實這是一種常用的運算符簡寫方式,意思是“自己給自己加上某個值”,例如This._Rotation+=10和This._Rotation=This._Rotation+10是等效的。

  2.4.3onClipEvent(MounseMove)、onClipEvent (mouseDown)和onClipEvent (mouseUp)
  這個事件和前面見過的很多時間似乎有些相似,這幾個事件確實是當(dāng)鼠標(biāo)移動的時候發(fā)生,但是要特別注意一點,不論鼠標(biāo)在場景的什么位置(而不一定要在影片剪輯上方),這個事件都會發(fā)生。鼠標(biāo)每動一下,MouseMove事件都會發(fā)生一次。同樣,你又要問,這個事件能干什么了?舉例來說,我們需要制作一個類似泡泡龍那樣的游戲,屏幕下方有一門大炮,當(dāng)鼠標(biāo)移動的時候,炮口會始終指向鼠標(biāo)的方向。這種效果就可以onClipEvent(MouseMove)來實現(xiàn)。具體來說,就是將大炮制作成一個影片剪輯,然后為其添加這樣的代碼:

  onClipEvent(mouseMove)

  {

  var_angle=((this._x-_root._xmouse)/(this._y-_root._ymouse));

  trace(var_angle);

  var_angle=Math.atan(var_angle);

  var_angle=var_angle*180/Math.PI;

  this._Rotation=-var_angle;

  }

  這段代碼用到了幾個Flash提供的數(shù)學(xué)函數(shù),它們都是在Math對象內(nèi)部的,因此用起來很方面。首先,用當(dāng)前影片剪輯的橫向和縱向座標(biāo)減去鼠標(biāo)的橫向和縱向座標(biāo),然后計算及其夾角的正弦值,接著將這個值用反正切函數(shù)換算成角度(Math.atan),注意,結(jié)果是弧度數(shù),需要再轉(zhuǎn)換成常用的角度,最后在將其復(fù)制給影片剪輯的_Rotation參數(shù),實現(xiàn)大炮隨著鼠標(biāo)指針的運動而旋轉(zhuǎn)的效果。

  搞懂了mouseMove事件,MouseDown和MouseUp的含義也就不難理解了。

  2.4.4OnClipEvent(keyDown)和onClipEvent(KeyUp)
  這兩個事件和前面的on(Keypress)相似,都是用來捕獲鍵盤的按鍵事件的。不過,需要特別強調(diào)的是,OnClipEvent(KeyDown)和onClipEvent(KeyUp)這兩個事件的功能要強大得多,將它們結(jié)合起來使用可以捕捉用戶按下的組合鍵(比如CTRL+A),這比只能夠捕捉單個按鍵動作的on(Keypress)要強大得多。比方說,如果我們需要捕捉用戶按下CTRL+F的操作可以使用這樣的代碼:

  onClipEvent(keyUp)

  {

  if (Key.isDown(Key.CONTROL) && Key.isDown(70))

  {

  //執(zhí)行相應(yīng)的操作

  }

  }

  這段代碼中使用了內(nèi)置對象Key,這個對象對于按鍵的處理非常有用。IsDown()方法用來監(jiān)測某個鍵是否已經(jīng)按下,這個函數(shù)的參數(shù)可以是鍵值比如70對應(yīng)F鍵。也可以使用Key對象內(nèi)置的鍵名稱,比如Key.CONTROL就是指CTRL鍵。將這兩個鍵是否按下的結(jié)果進(jìn)行邏輯與運算(&&)就可以知道CTRL和F鍵是否同時按下。

  2.4.5OnClipEvent(data)
  如果某個影片剪輯實例進(jìn)行了數(shù)據(jù)加載的操作,那么OnClipeEvent(data)事件會在數(shù)據(jù)加載完成的時候發(fā)生。比方說,我們在某個按鈕的on(press)事件處理中加入了代碼執(zhí)行變量加載操作,并將代碼加載函數(shù)loadVariables()的目標(biāo)參數(shù)設(shè)置為某個影片剪輯。然后再為這個影片剪輯添加OnClipEvent(data)事件,當(dāng)參數(shù)加載完畢之后,影片剪輯就會收到一個OnClipEvent(data)事件。

  前面介紹了很多事件,但事實上Action Script提供的事件還有很多。除了鍵盤事件、鼠標(biāo)事件等等這些非常直觀的事件之外,還有一些比較“抽象”的事件。比方說,一段聲音播放完成之后會產(chǎn)生一個事件,當(dāng)用戶調(diào)整播放器的窗口大小時也會產(chǎn)生一個事件。捕獲并處理這些事件可以進(jìn)一步提升Flash影片的互動性能。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多