摘要:在Flash中適當(dāng)?shù)膽?yīng)用物理知識(shí),可以使制作的動(dòng)畫、游戲等更為逼真。很多真實(shí)的現(xiàn)象和情境也必須依靠數(shù)學(xué)、物理知識(shí)的支撐,才能夠在Flash制作中重現(xiàn)出來(lái)。本文即以彈跳的小球?yàn)槔U述如何將物理知識(shí)應(yīng)用到Flash編程中。文中詳細(xì)介紹了此動(dòng)畫的制作原理和步驟,給廣大的愛好者和設(shè)計(jì)人員一定的啟示。
關(guān)鍵詞:Flash編程;物理知識(shí);小球
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)08-10ppp-0c
1 引言
與其他動(dòng)畫制作軟件相比,F(xiàn)lash的最大優(yōu)勢(shì)在于其擁有強(qiáng)大的互動(dòng)編輯功能。用戶不僅可以使用Flash制作出流暢的動(dòng)畫,還可以利用Flash中的Action Script語(yǔ)言編輯制作出精彩的動(dòng)畫特效、互動(dòng)性極強(qiáng)的應(yīng)用程序和功能完備的互聯(lián)網(wǎng)站……正因?yàn)镕lash的這些特性,使得愛好者和學(xué)習(xí)者越來(lái)越多,創(chuàng)意不斷,從而也產(chǎn)生了越來(lái)越多的美麗和精彩的動(dòng)畫。然而我們也逐漸發(fā)現(xiàn)在動(dòng)畫和游戲制作過程中,有些現(xiàn)象和情景僅靠創(chuàng)意和技術(shù)是實(shí)現(xiàn)不了的,更需要一些物理和數(shù)學(xué)知識(shí)的支撐。比如轎車上坡、球在地上彈跳和星星沿著軸轉(zhuǎn)動(dòng)等不利用物理學(xué)的理論是很難實(shí)現(xiàn)的。因此,我們應(yīng)該在Flash編程過程中應(yīng)用正確的物理定律來(lái)逼真地模擬任何彈跳、飛行、翻滾、滑行或非靜止的物體,以建立令人矚目且真實(shí)的游戲、動(dòng)畫內(nèi)容。本文中即以小球從高空落下,遇地后反彈再落下,重復(fù)進(jìn)行,直至最終靜止這一客觀現(xiàn)象為例,闡述如何在Flash編程過程中應(yīng)用物理知識(shí)使之真實(shí)再現(xiàn)。
2 實(shí)現(xiàn)方法
2.1 物理學(xué)中的相關(guān)公式
設(shè)物體運(yùn)動(dòng)過程中初速度為ν0,運(yùn)動(dòng)過程中任意時(shí)刻 時(shí)的瞬時(shí)速度為νt,加速度為α,位移為S,則有:
對(duì)于從高空落下的小球來(lái)講,我們忽略其下落過程受到的空氣阻力作用,將其下落過程視為自由落體運(yùn)動(dòng),其初速度ν0 = 0,加速度α=g≈9.8m/s2,則以上兩個(gè)公式可以變換為:
2.2 實(shí)現(xiàn)步驟
下面我們則具體介紹小球彈跳的實(shí)現(xiàn)過程。
第一步,新建一個(gè)Flash文檔,大小為550*400,在舞臺(tái)中導(dǎo)入一個(gè)尺寸為50*50的小
球(亦可自己在舞臺(tái)中繪制),然后將其轉(zhuǎn)化為影片剪輯。
第二步,選中此影片剪輯,按F9進(jìn)入動(dòng)作面板,將小球的初始狀態(tài)作為其屬性,添加
代碼如下:
onClipEvent(load)
{
ballSpeedY=0;
gravity=9.8;
bouncing_floor=350;
bounce=0.9;
}
以上代碼表示當(dāng)影片剪輯裝載時(shí),小球相應(yīng)的屬性便隨之確定,并不會(huì)發(fā)生改變。這一過程即是對(duì)小球的狀態(tài)進(jìn)行初始化設(shè)置。小球下落的速度用ballSpeedY來(lái)表示,加速度gravity取9.8。為了確定小球的落地點(diǎn),我們?cè)O(shè)置一個(gè)標(biāo)志符bouncing_floor。由于文檔的高度為400,小球的高度為50,在Flash中x坐標(biāo)軸向右為正方向,y坐標(biāo)軸向下為正方向,原點(diǎn)位于舞臺(tái)左上角,標(biāo)志物體位置時(shí),默認(rèn)為以物體的外接矩形左上角的點(diǎn)位準(zhǔn),因此,小球落地時(shí),其y軸坐標(biāo)為350,即設(shè)bouncing_floor=350。小球落體后會(huì)發(fā)生反彈,在此過程中有部分能量損耗,因此反彈系數(shù)設(shè)為bounce=0.9。
第三步,為小球添加運(yùn)動(dòng)代碼。由公式(1)可得,每過時(shí)間t,小球的速度ballSpeedY可記為:ballSpeedY+=gravity*t,為簡(jiǎn)單起見,我們?nèi)=1s,則ballSpeedY+=gravity。
由公式(2)變換可得:
lhy01.tif (5)
即小球的位置變化為this._y+=ballSpeedY-gravity/2。為防止最后一秒小球落至地面以下,因此需加以條件判斷。當(dāng)小球落至地面以下時(shí),需將小球位置,速度均重置為至地面位置,并使速度反向,為體現(xiàn)能耗作用,還需將其乘以反彈系數(shù)。小球落至地面時(shí),其位置為this._y=bounce_floor,速度可根據(jù)公式(3)、(4)推算得出,若小球下落距離為 ,則落地時(shí)刻的速度ν為:
ν= ?2gh (6)
由此可得出小球落地時(shí)刻的速度F=Math.sqrt(2*gravity*(350-this._y))并將此語(yǔ)句添至第二步的onClipEvent(load)中。至此小球的運(yùn)動(dòng)過程已分析完畢,第三步的完整代碼為:
onClipEvent (enterFrame)
{
ballSpeedY+=gravity;
this._y=this._y+ballSpeedY-gravity/2;
if(this._y>=bounce_floor)
{
this._y=bounce_floor;
F*=bounce;
ballSpeedY=-F;
}
}
3 結(jié)束語(yǔ)
本文以簡(jiǎn)單的小球彈跳過程為例,講解了物理知識(shí)在Flash編程中的應(yīng)用方法。物理學(xué)在動(dòng)畫和游戲制作中起著關(guān)鍵的作用,可以幫助你在游戲中模擬各種真實(shí)的現(xiàn)象,讓人產(chǎn)生身臨其境的感覺。在Flash制作過程中正確適當(dāng)?shù)倪\(yùn)動(dòng)物理知識(shí),可有效提高作品中對(duì)象和動(dòng)作的真實(shí)性,增強(qiáng)制作水平。
參考文獻(xiàn):
[1]蘇風(fēng)華.Flash8入門與實(shí)例教程[M].北京:電子工業(yè)出版社,2006.
[2]姜慧竹.“閃”出精彩——簡(jiǎn)析Flash編程[J].中文信息:程序春秋,2002,(2).
[3]菲利普?科曼,陳冰.帶你走入Flash編程之門——評(píng)《Flash Action Script權(quán)威指南》[J].電腦知識(shí)與技術(shù),2003,(13).
[4]尹小港. Flash8 Action Script交互特效設(shè)計(jì)108例[M].北京:中國(guó)青年出版社,2006.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”