2007
12.24


今天就是耶誕節了,先祝各位耶誕節快樂,台灣看不到耶誕節的雪景,那就用Flash和ActionScript 3.0來下場雪送給大家吧,很適合網在網路上,因為才2.69KB而已。

要輕鬆完成隨機且美觀的雪花其實並不難,只要上過我的課或是看過我的書[Flash CS3 Professional ActionScript 3.0打造互動設計力與美]就可以輕鬆完成這個任務了,在這篇文章中就不詳細的說明程式內容了,主要是祝大家耶誕節快樂外加順便來篇輕鬆小品,詳細內容請看書中的說明跟示範。 

STEP1:
首先要飄雪花總是要先把雪花畫出來吧,在這示範一下如何在Flash中快速的畫完雪花,可以用多邊型工具畫出雪花的中心。
snow0.jpg

將[樣式]改成星形,並設定[邊數]為6,[星狀控制點的大小]為0.6。snow1.jpg

這樣畫出來的星形財部會太尖銳,留點圓弧感會比較給人柔和的感覺,畫出來的感覺如下圖。
snow2.jpg

STEP2:
接下來用線段工具來畫出雪花的線。
snow3.jpg

線段的粗細可以自己決定,完全是看雪花中心搭配起來的狀況來決定,請畫出類似這樣的圖案。
snow4.jpg

 STEP3:
將剛剛畫完的圖形組合在一起,並將顏色改成白色,這樣雪花的雛形就大致完成了,完成效果如下圖。
snow5.jpgsnow6.jpg

完成後請轉換成影片片段,剩下的動畫和濾鏡效果交給ActionScript 3.0就可以快速完成了。
snow_update.jpg

STEP4:
寫上以下的ActionScript 3.0來完成整個展示的效果,大略的介紹幾個關鍵的變數和函數,這樣若大家想要修改或調整效果會比較方便:

  1. snowNum是雪花的數量
  2. moveHandler用來控制動畫效果

剩下的就交給大家去發揮了!
懶得自己做的人,可以下載最後的成果。

import flash.filters.GlowFilter;
var snowNum:int = 20;
var snow:MovieClip;
for (var i:int=0; i<snowNum; i++) {
 snow = new Snow();
 this.addChild(snow);
 var randomValue:Number = Math.random()*1+1;
 snow.x=Math.random()*stage.stageWidth;
 snow.y=Math.random()*stage.stageHeight;
 snow.scaleX=snow.scaleY=randomValue;
 snow.alpha=Math.random()*randomValue+0.3;
 snow.rotation=Math.random()*360;
 snow.filters = [new GlowFilter(0xFFFFFF,0.5)];
 snow.addEventListener(Event.ENTER_FRAME,moveHandler);
}
function moveHandler(event:Event):void {
 var target:MovieClip = event.target as MovieClip;
 target.x += Math.random()*target.width/50+1;
 target.y += target.width/50+1;
 target.rotation++;
 if (target.y > stage.stageHeight+target.height/2) {
  target.y=-target.height/2;
 }
 if (target.x > stage.stageWidth+target.width/2) {
  target.x=-target.width/2;
 }
}

完成效果:
snow.jpg 

後記:
當大家在狂歡耶誕節的時候,你想到的是耶穌誕生,耶誕老公公還是徹夜狂歡?千萬別想到火雞啊,那是感恩節啦 XD,如果你對耶誕節跟相關的名詞不是很清楚的話,可以參考Wiki上的記載,哼,本來是要寫一篇這個的,既然有人寫過了我就不寫了,請參考耶誕節相關知識 。
 

其實當大家在討論火星文的時候(就是類似Orz這種的),我反倒對一些俚語的由來產生了很大的興趣,例如"抓猴",我問了google大神,真是眾說紛紜,有人知道標準答案嗎?如果知道的話請不吝指教,到底哪個說法才是有根據的由來?


相關文章:
  • [分享]Flex 4 與 Flash CS5的 API表
  • Facebook 的ActionScript API 更新到 3.3版
  • Flash on iPhone,代誌就這麼發生了
  • 用ActionScript讀取相片中的exif資訊
  • 現場直擊Flash/Flex特效瘋-8/26活動內容預告
  • 本文引用:
    文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。

    20 comments so far

    Add Your Comment
    1. 宋老師您好,最近在看您的書,試作泡泡那個範例時,當我照著您書上的程式碼打時,測試時,第2行 root.addChild(myBubble); 都會出現「呼叫可能未定義的方法 addChild」的錯誤,如果把這行改成 stage.addChild(myBubble); 或 this.addChild(myBubble); 就不會有錯誤,請問為什麼??先謝謝了!

    2. 沒說清楚,所以再補充Orz
      例如:都放在同一個資料夾內
      如果說要讓它載入完成後才放到舞台上,忽略進度百分比,在某FLA檔第一個影格寫下面的程式碼,
      照理來說應該沒問題吧@@?
      var loadObj:Loader = new Loader();
      loadObj.load(new URLRequest("snow.swf"));
      var info:LoaderInfo = loadObj.contentLoaderInfo;
      info.addEventListener(Event.COMPLETE,showSwf);
      function showSwf(e:Event){
      this.addChild(loadObj);
      }
      可是執行時就會出現:無法存取 Null 物件參考的屬性或方法。
      請問這樣寫有錯嗎?是我忽略什麼嗎,麻煩告知謝謝>

    3. 您好,請問為什麼只要把這個snow.swf 利用Loader 外部載入的方式
      之後執行時,第一個影格就會錯了,會出現 ↓↓
      無法存取 Null 物件參考的屬性或方法。
      然後動畫就不會動了
      很想知道為什麼,可以解惑一下嗎@@

    4. 你需要研究Loader的寫法 XD

    5. 您好~我想請問雪花的語法,若要加上外部LOAD TEXT該怎麼寫~~我試都會出現錯誤。謝謝

    6. 忙中有錯,常有的事;但是還是要向您說聲—謝謝您的分享,很漂亮呦!
      只是若想要坐享其成,那可得小心點, 算是另類考驗吧!
      也祝福您—新年愉快!

    7. Dear 木蘭從軍:
      忙中有錯,貼錯圖了,已更正。

    8. 若"snow = new Snow();" 則在"連結"內的"類別名稱",也必須命名為"Snow",
      否則會出現" 1180: Call to a possibly undefined method Snow." (錯誤訊息)

    9. Dear 兔兔:
      這就是書和課堂中泡泡的變形啊,只要善用這些方法酒可以很容易做出其他應用。
      下次來把抓猴我所找到的說法來跟大家分享好了,我覺得還蠻好笑的。

    10. 也祝老師「聖誕快樂」~

      很應景的雪花~跟泡泡好像哦~

      關於抓猴一詞~yahoo知識到是大同小異~
      不過「藉猴喻人」這個說法也滿貼切的~
      大概要去找~民間故事~這類的才知道典故吧
      XD