[AS3程式設計教學]掉落的小球(3)?

Tags: 教學, 小球,

大家可以對比一下,本教程的上一篇是去年的12月份寫的,今天已經2013年的6月份了,這6個月沒有繼續往下寫的原因並不是筆者辭職回了趟老家然後發現呆不下去又跑到深圳工作了,絕對不是這些顛簸和瑣事。

而是,當初那個徒弟學到第二篇就不想繼續往下學了,果然不出所料此人又是一個半途而廢意志力不夠堅強的人。

實話說,從大二開始便有慕名而來單方面強行喊我師傅的人,然後如今我已經畢業工作了四年了,這六七年的時間為何沒有一個徒弟出師,這實在是一個需要思考的問題。

話不多說,本節開始對掉落的小球這個簡單物理現象用程式來實現,到最後你會發現,只有程式實現的效果才是最真實的,因為程式是理性的,用程式碼寫出來的是科學嚴謹的;而用動畫做那是感性的,不夠真實的。

目標:我們讓小球勻速下降到地面,主要學會勻速運動的表現。

[AS3程式設計教學]掉落的小球(3)

工具/原料

FlashCS5.5

方法/步驟

開啟FlashCS5.5,新建一個名為“掉落的小球3.fla”的檔案,在舞臺下方位置畫一條線當做是地面,並儲存在你電腦上某個地方。這些就不多說了,大家都不是小孩子。曾經有個人不存東西,做了7個小時候的動畫就丟了。。。重新做一遍不但花時間而且非常無聊。

[AS3程式設計教學]掉落的小球(3)

在舞臺上畫一個不大不小的圓,按下F8,轉成影片剪輯,取名為“小球”,然後回到舞臺選中小球,屬性面板取名為“mcBall”。

[AS3程式設計教學]掉落的小球(3)

我們理一下思路,需要做一個小球從高處掉落然後停下來的效果。所以這一步我們就用程式碼將小球放到高處某個位置。這個做法很簡單,我們按下F9,在第一幀輸入如下程式碼:

//小球的高度在50,橫座標我們舞臺上隨機。

mcBall.x = Math.random()*stage.stageWidth;

mcBall.y = 50;

[AS3程式設計教學]掉落的小球(3)

這一步要開始掉落了。你要知道掉落是個持續過程,這個過程表現在舞臺上就是小球的y座標一直增大(舞臺座標左上角是最小的(0,0)點),所以我們需要一個持續呼叫某個方法來不停地改變小球的y位置的處理。在我腦中有四五種方法可以實現,今天就說最常用的一種:ENTER_FRAME事件。

stage.addEventListener(Event.ENTER_FRAME,downBall);

function downBall(e:Event):void

{

mcBall.y+=5;

}

[AS3程式設計教學]掉落的小球(3)

解釋一下上面的程式碼,ENTER_FRAME事件是一個按照幀頻的頻率持續呼叫某個方法的事件,比如本教程使用的幀頻是24幀,那麼意味著每秒呼叫偵聽函式24次。我們以這麼高的頻率做了什麼呢?就是讓小球的位置每次往下移動5個畫素。

你測試一下,是不是發現小球已經開始往下掉了!只不過是勻速運動。而且小球會無限地往下掉,雖然你看不到,但是小球還是在一直往下掉,這沒必要因為看不見的事情你做了也沒用,所以我們判斷一下,當小球掉到地面高度時後就停止繼續掉落方法的執行。

stage.addEventListener(Event.ENTER_FRAME,downBall);

function downBall(e:Event):void

{

mcBall.y+=5;

//實時判斷是否到達地面,我的地面在367這個高度

if(mcBall.y+mcBall.height>=367)

{

mcBall.y=367-mcBall.height;

stage.removeEventListener(Event.ENTER_FRAME,downBall);

}

}

[AS3程式設計教學]掉落的小球(3)

本次教程到此結束,下一篇我們講述真實的加速掉落。

[AS3程式設計教學]掉落的小球(3)

注意事項

本教程是一個入門級的編碼練習,程式優化和效率以及合理性方面暫不討論,這些課題留在以後實現。

如果你的效果不對,那就重新來一遍。

相關問題答案