文章出處

本例為Flash AS3.0菜鳥學飛系列教程,在上一講中我們學習了含有多個類的AS3類文件的寫法,在這一講中我們來學習幀循環的運用,希望能給初學Flash AS編程的朋友帶來幫助~~

學習AS3菜鳥起飛吧之幀循環

多幀循環

Flash中的幀在默認情況下是循環執行的,租用gotoAndPlay()函數可以實現簡單的幀循環,而實現代碼的重復執行。
 gotoAndPlay()函數的用途是控制或改變影片剪輯的播放流程,如果在影片的第1幀畫面中放置需要重復執行的程序,然后在第2幀加入gotoAndPlay(1)語句。反復執行第1幀畫面的程序,那么gotoAndPlay()函數就構成了一個循環程序結構。
 gotoAndPlay()函數沒有條件判斷功能,是無條件重復的循環結構。但可以和if語句一起使用。形成具有判斷終止條件功能的循環。

下面用幀循環制作勻速運動:

1、新建Flash文檔
2、在圖層1的第一幀創建一個實例名為mc的影片剪輯實例
3、新建as層,單擊第1幀輸入代碼: 

 

//得到mc的橫坐標
  var dx:Number = mc.x;
//定義速度
  var speed:Number = 10;
4、在as層的第2幀插入空白幀,輸入代碼;
  //橫坐標加上速度
dx += speed;
//設置mc的橫坐標
  mc.x = dx;
5、在as層的第3幀插入空白幀,輸入代碼:
  //判斷是否超出舞臺邊界
  if(dx < stage.stageWidth)
{
//跳到第2幀并播放
  this.gotoAndPlay(2);
//如超出舞臺的右邊界
 } else
{
//停止播放
 this.stop(); 
}

stage是Stage類的實例,Stage類有名為stageWidth的屬性,表示舞臺的寬度。

6、測試影片,可以看到影片實例會一直運動到舞臺的右邊界。

 從測試結果看,影片的運動并不流暢,這與幀頻和幀循環結構有關。Flash默認幀頻是12FPS,就是一秒播放12幀。上面的程序由于使用了幀跳轉語句,實際需要每播放兩幀才會執行第2幀的代碼一次,這就是說第2幀的代碼執行頻率是6FPS,所以動畫效果會顯得不流暢。

圖層結構圖示:

Flash AS3教程:幀循環學習實例,PS教程

上面的例子執行代碼的速度只有幀頻的一半,而且代碼分散,不適合制作復雜的應用程序。我們可以利用enterFrame事件以幀頻的速度執行代碼,而且代碼可以集中在一幀。

用enterFrame事件制作勻速運動:

1、新建Flash文檔
2、在圖層1創建一個實例名為mc的影片剪輯
3、新建as圖層,單擊第1幀,輸入代碼: 

//動態更改幀頻
  stage.frameRate = 30;
//獲取mc初始位置
  var dx:Number = mc.x;
//定義速度
  var speed:Number = 5;
//注冊偵聽器
  mc.addEventListener(Event.ENTER_FRAME,onMove);
//定義事件接收函數
  function onMove(e:Event)
{
//坐標加速度
    dx += speed;
//影片剪輯的坐標
   e.target.x = dx; 
//如果影片運動到舞臺右邊界
   if(ds > stage.stageWidth)
{
//移除enterFrame事件
    mc.removeEventListener(Event.ENTER_FRAME,onMove);
}
}

代碼使用了Event類的ENTER_FRAME屬性,接收函數中參數e是Event類的實例,它具有target屬性,target表示事件發送者mc。

進入論壇參與討論:http://www.missyuan.com/viewthread.php?tid=425913

 

4、測試影片
使用enterFrame事件可實現代碼的重復執行,它執行的速度與幀頻有關。
提示:當不需要使用enterFrame事件時,一定要用removeEventListener()函數來刪除enterFrame事件。


歡迎轉載:http://www.kanwencang.com/bangong/20161116/54248.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()