文章出處

如果你對本篇文章很感興趣或是在學習Flash時遇到了什么困難,歡迎到我們的學院論壇來交流。


  與AS2.0相比較,AS3.0有了很大的變化,它改變了我們以往的編程習慣。今天我們通過一個非常簡單的入門練習-下雪效果,來認識一下AS3.0,主要了解一下AS3.0與AS2.0的區別。

  首先,我們來介紹一下AS3的一些基礎知識。

  在AS3中怎樣把庫中的元件加載舞臺

  我們知道在AS2中我們可以通過attachMovie將庫中的mc加載到舞臺上。在使用這個命令前我們必須要做的事情是在庫中右擊元件,打開連接面板,然后在標識符框中為元件取上一個連接名,這樣才能用attachMovie()來加載它。現在我們在AS3中來做一下,在庫中右擊元件,打開連接面板,這時你會叫道:“為什么我的標識符框是灰色的,不能用。”不是你的是灰色的,而是在AS3中都是灰色的,因為在AS3中是不能用 attachMovie()來加載元件的。AS3據說是完全面向對象編程的語言了,這就必須要了解類,對象等概念。類就是一類東西的一個名稱,比如動物類就包括了所有動物,動物類下面的所有人就是人類了。又如所有電器可叫電器類,電器類下面又可有電視機類等。對象是某類的一個具體的實例。比如你就是人類中的一個具體的人,你就是人類的一個對象。看到這里你說:“我暈”,我說:“我更暈”。介紹類,對象這些概念看的人不容易看懂,說的人更不容易說清。在 AS3中要加載一個顯式對象(我們在舞臺上看得見的東西),必須要載入一個類,然后要聲明這個類的一個實例,再用new關鍵字創建它,最后用 addChild()將它加載到舞臺。我們將舞臺著是一個展臺,將庫看著是一個倉庫,現在倉庫中有一臺電視機要放到展臺上,該怎樣做呢?首先需要一個電視機類,然后需要聲明一個實例:

  var 電視機甲(實例名):電視機(類名)= new 電視機();

  addChild(電視機甲);

  現在我們回到flash中來看看,現在庫中有一個元件,我們要將它加載到舞臺上,應該這樣做:

  在庫中右擊該元件,打開連接面板,我們會看到一個叫類的文本框,在這里給這個類取一個名字,比如myl.確定。這樣我們就加載了一個叫myl的類了。接下來,在場景的幀動作中,輸入:

  var mymc:myl = new myl();

  addChild(mymc);

  mymc.x = 100;

  mymc.y = 100;

  測試影片,我們會看到,庫中的這個元件已被加載到舞臺的(100,100)坐標處了。


  AS3的事件偵聽機制

  什么是事件呢?當某件事情發生的時候就做些什么事。這個某件事情就是事件。比如:press,當鼠標按下的時候,這就是一個事件。在AS2中,我們有兩種方式來實現事件驅動。一種是將代碼直接寫在元件上(mc或按鈕)。比如,在場景中有一個叫mymc的影片剪輯元件,我們在其上點右鍵,打開動作面板,輸入:

  on(press){

  干點壞事;

  }

  這樣,當我們在mymc元件上按下鼠標時,就會去干點壞事。第二種方法是在幀動作上輸入代碼:

  mymc.onPress = function(){

  干點壞事;

  }

  這樣,當我們在mymc元件上按下鼠標時,同樣會去干點壞事。

  接下來,我們在AS3中來看看:在元件上點右鍵,打開動作面板,你會看到“無法將動作應用于當前所選內容”。哦嗬,搞不成。在AS3中無法將代碼寫在元件上,只能寫在幀動作上。而AS3的事件偵聽,也有它自已,的格式,不管你樂意不樂意,你都必須這樣做。AS3在事件偵聽格式是:

  function 函數名稱(事件對象:事件類型):void

  {

  // 此處是為響應事件而執行的動作。

  }

  觸發事件的對象.addEventListener(事件類型.事件名稱, 函數名稱);

  必須先聲明一個函數,將要執行的代碼放在其中,然后觸發事件的對象用addEventListener去偵聽事件,如果事件發生則調用函數。還用上面那個干壞事的例子。打開幀動作面板,輸入:

  function 干壞事(event:MouseEvent):void {

  干點壞事;

  }

  mymc.addEventListener(MouseEvent.CLICK,干壞事);

  這樣,當我們在mymc元件上按下鼠標時,會再一次去干點壞事。上面代碼中的MouseEvent是鼠標事件的意思,CLICK是單擊的意思,即在元件上單擊就會觸發事件。


  在AS3中改變對象的位置和縮放對象

  我們知道,對象在舞臺上位置由其x,y軸的坐標來決定。在AS2中有兩個屬性:_x,和_y,用來指定對象的x,y坐標,這一點在AS3中也是一樣的,只是AS3中去掉了下劃線,屬性名就叫x,y.比如,在AS2中,要將mymc的位置定在(100,100)處,要這樣:

  mymc._x = 100;

  mymc._y = 100;

  而在AS3中是這樣的:

  mymc.x = 100;

  mymc.y = 100;

  在AS2中對象的大小可以用width,height,_xscale,_yscale四個屬性來確定,在AS3中width和height是一樣的,不再說它了。AS3用scaleX和scaleY屬性取代了_xscale,_yscale屬性。同時它們的值也是有區別的。AS2中的,_xscale, _yscale屬性值是百分比。而AS3中的scaleX和scaleY值是一分比。一分比?這是我發明的,博士專用名詞,嘿嘿。scaleX和 scaleY值實際就是放大縮小的倍數。比如,在AS2中 mymc._xscale = 30; 這是將mymc的寬度縮小到原來的30%。

  在AS3中 mymc.scalex = 30; 這是將mymc的寬度放大到原來的30倍。要將寬度縮小到30%,就要用

  mymc.scale = 0.3;

  好了,基礎知識就介紹這么多,本文就當是AS3的入門教程吧,介紹的就幾個入門知識。

  下面我們就來做一個下雪效果的練習,將上面的知識點運用到實例中。

  實例練習-下雪效果

  效果演示:

  

  打開flash cs3,選擇新建flash文件(ActionScript 3.0).

  導入一張背景圖片,在場景中放好。

  新建一個影片剪輯元件,將舞臺放大到800%,用橢園工具,畫一個無筆觸,填充色為放射將白色左色標透明度為100%,右色標透明度0%的橢園,大小這 4x3,用選擇工具調整一下,使其不太規則。在第30幀插入關鍵幀。插入引導層,畫一條由上向下的彎曲引導線。回到第一層,在第一幀和30幀,分別將橢園放到引導線的兩端,建立補間動畫。

  如圖:

  
下雪效果

  放大至800%時

  
下雪效果
  打開庫,在元件上右擊,打開連接面板,在類文本框中輸入:xl,確定。

  
下雪效果  回到主場景,新插入一圖層,命名為action,打開動作面板:輸入:

  var i:Number = 1;

  addEventListener(Event.ENTER_FRAME,xx);

  function xx(event:Event):void {

  var x_mc:xl = new xl();

  addChild(x_mc);

  x_mc.x = Math.random()*550;

  x_mc.scaleX = 0.2 Math.random();

  x_mc.scaleY = 0.2 Math.random();

  i ;

  if(i>100){

  this.removeChildAt(1);

  i=100;

  }

  }

  ok,完成。

  上面的代碼,在基礎介紹中都已說明了,應該一看就明白了。有幾句解釋一下。

  x_mc.scaleX = 0.2 Math.random();

  x_mc.scaleY = 0.2 Math.random();

  0.2 Math.random();會產生0.2-1.2間的隨機數,這就讓雪花縮小到20%到放大到120%間,落下來的雪花,大小不一,顯得更加真實一些。

  removeChildAt(n);是刪除已加載的顯式對象,其中的n是已加載的對象的索引號。從addEventListener (Event.ENTER_FRAME,xx);這一句可以看出,運行一幀,就會從庫中加載一個雪花,同時i加,這樣當i等于100時,場景中就已有 100個雪花了。這個時候我們用this.removeChildAt(1);將最先加載的雪花刪除。然后將i設為100,到下一幀,i就又大于100 了,那么要加載1個雪花,同時又刪除了一個雪花,這就達到了一個動態平衡,場景中始終只有100個雪花。要不然,就會雪越下越多,造成雪災就不好了。
歡迎轉載:http://www.kanwencang.com/bangong/20161206/63916.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

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