12.24
今天就是耶誕節了,先祝各位耶誕節快樂,台灣看不到耶誕節的雪景,那就用Flash和ActionScript 3.0來下場雪送給大家吧,很適合網在網路上,因為才2.69KB而已。
要輕鬆完成隨機且美觀的雪花其實並不難,只要上過我的課或是看過我的書[Flash CS3 Professional ActionScript 3.0打造互動設計力與美]就可以輕鬆完成這個任務了,在這篇文章中就不詳細的說明程式內容了,主要是祝大家耶誕節快樂外加順便來篇輕鬆小品,詳細內容請看書中的說明跟示範。
STEP1:
首先要飄雪花總是要先把雪花畫出來吧,在這示範一下如何在Flash中快速的畫完雪花,可以用多邊型工具畫出雪花的中心。

將[樣式]改成星形,並設定[邊數]為6,[星狀控制點的大小]為0.6。
這樣畫出來的星形財部會太尖銳,留點圓弧感會比較給人柔和的感覺,畫出來的感覺如下圖。

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

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

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


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

STEP4:
寫上以下的ActionScript 3.0來完成整個展示的效果,大略的介紹幾個關鍵的變數和函數,這樣若大家想要修改或調整效果會比較方便:
- snowNum是雪花的數量
- 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;
}
}
完成效果:
後記:
當大家在狂歡耶誕節的時候,你想到的是耶穌誕生,耶誕老公公還是徹夜狂歡?千萬別想到火雞啊,那是感恩節啦 XD,如果你對耶誕節跟相關的名詞不是很清楚的話,可以參考Wiki上的記載,哼,本來是要寫一篇這個的,既然有人寫過了我就不寫了,請參考耶誕節相關知識 。
其實當大家在討論火星文的時候(就是類似Orz這種的),我反倒對一些俚語的由來產生了很大的興趣,例如"抓猴",我問了google大神,真是眾說紛紜,有人知道標準答案嗎?如果知道的話請不吝指教,到底哪個說法才是有根據的由來?
相關文章:
文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。


宋老師您好,最近在看您的書,試作泡泡那個範例時,當我照著您書上的程式碼打時,測試時,第2行 root.addChild(myBubble); 都會出現「呼叫可能未定義的方法 addChild」的錯誤,如果把這行改成 stage.addChild(myBubble); 或 this.addChild(myBubble); 就不會有錯誤,請問為什麼??先謝謝了!
沒說清楚,所以再補充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 物件參考的屬性或方法。
請問這樣寫有錯嗎?是我忽略什麼嗎,麻煩告知謝謝>
您好,請問為什麼只要把這個snow.swf 利用Loader 外部載入的方式
之後執行時,第一個影格就會錯了,會出現 ↓↓
無法存取 Null 物件參考的屬性或方法。
然後動畫就不會動了
很想知道為什麼,可以解惑一下嗎@@
你需要研究Loader的寫法 XD
您好~我想請問雪花的語法,若要加上外部LOAD TEXT該怎麼寫~~我試都會出現錯誤。謝謝
忙中有錯,常有的事;但是還是要向您說聲—謝謝您的分享,很漂亮呦!
只是若想要坐享其成,那可得小心點, 算是另類考驗吧!
也祝福您—新年愉快!
Dear 木蘭從軍:
忙中有錯,貼錯圖了,已更正。
若"snow = new Snow();" 則在"連結"內的"類別名稱",也必須命名為"Snow",
否則會出現" 1180: Call to a possibly undefined method Snow." (錯誤訊息)
Dear 兔兔:
這就是書和課堂中泡泡的變形啊,只要善用這些方法酒可以很容易做出其他應用。
下次來把抓猴我所找到的說法來跟大家分享好了,我覺得還蠻好笑的。
也祝老師「聖誕快樂」~
很應景的雪花~跟泡泡好像哦~
關於抓猴一詞~yahoo知識到是大同小異~
不過「藉猴喻人」這個說法也滿貼切的~
大概要去找~民間故事~這類的才知道典故吧
XD