當前位置:開發者網絡 >> 技術教程 >> 網頁設計 >> Flash >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
Flash MX 2004 ActionScript圖文教程(十二)
作者:未知
日期:2005-04-30
人氣:
投稿:(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
  2.4影片剪輯事件
  相對於前面所介紹的鼠標事件、鍵盤事件以及幀事件而言,影片剪輯事件則顯得稍為有點難懂。當我們將一個影片剪輯放到場景中時,他就成了一個「事件發射器」,不斷地報告自己的運行狀態,如果我們捕獲這樣的事件,就可以做出相應的反應和處理。影片剪輯有多種,下面分門別類地加以介紹。

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

  onClipEvent(Load)

  {

  }

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

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

  onClipEvent(enterFrame)

  {

  this._Roation+=10;

  this._y+=10;

  }

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

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

  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提供的數學函數,它們都是在Math對像內部的,因此用起來很方面。首先,用當前影片剪輯的橫向和縱向座標減去鼠標的橫向和縱向座標,然後計算及其夾角的正弦值,接著將這個值用反正切函數換算成角度(Math.atan),注意,結果是弧度數,需要再轉換成常用的角度,最後在將其複製給影片剪輯的_Rotation參數,實現大炮隨著鼠標指針的運動而旋轉的效果。

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

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

  onClipEvent(keyUp)

  {

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

  {

  //執行相應的操作

  }

  }

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

  2.4.5OnClipEvent(data)
  如果某個影片剪輯實例進行了數據加載的操作,那麼OnClipeEvent(data)事件會在數據加載完成的時候發生。比方說,我們在某個按鈕的on(press)事件處理中加入了代碼執行變量加載操作,並將代碼加載函數loadVariables()的目標參數設置為某個影片剪輯。然後再為這個影片剪輯添加OnClipEvent(data)事件,當參數加載完畢之後,影片剪輯就會收到一個OnClipEvent(data)事件。

  前面介紹了很多事件,但事實上Action Script提供的事件還有很多。除了鍵盤事件、鼠標事件等等這些非常直觀的事件之外,還有一些比較「抽像」的事件。比方說,一段聲音播放完成之後會產生一個事件,當用戶調整播放器的窗口大小時也會產生一個事件。捕獲並處理這些事件可以進一步提升Flash影片的互動性能。

相關文章: