4. 彈性
彈性,一般是指物體接觸到到某個(gè)邊界,所進(jìn)行的回彈,在FLASH中,我們需要做的是設(shè)置好邊界,以及物體回彈的方向。那么如何確定它回彈的方向呢,我們?cè)O(shè)定一個(gè)邊界,當(dāng)小球超出邊界時(shí)小球回彈,也就是方向改變了。以x軸為例應(yīng)為:vx*=-1; 實(shí)際上你可能發(fā)現(xiàn)它實(shí)際上就是 vx=-vx;
代碼: //設(shè)定邊界 top=0; left=0; right=400; bottom=300; vx=10; vy=10; onEnterFram=function(){ my_mc._x+=vx; my_mc._y+=vy; //下面代碼檢測(cè)小球是否到達(dá)邊界,如果已到邊界,重設(shè)小球的正確做坐,并使其回彈, if(my_mc._x+my_mc._width/2>right){ my_mc._x=right-my_mc._width/2; vx*=-1; } if(my_mc._x-my_mc._width/2<left){ my_mc._x=left+mc_mc._width/2; vx*=-1; } if(my_mc._y-my_mc._height/2<top){ my_mc._y=top+my_mc._height/2; vy*=-1; } if(my_mc._y+my_mc._height/2>bottom){ my_mc._y=bottom-my_mc._height/2; vy*=-1; } }
演示:
通過演示我們發(fā)現(xiàn)小球在碰到邊界會(huì)不斷的回彈。
*注意:上面代碼中的my_mc._x,my_mc._y的坐標(biāo)都是指my_mc的中心點(diǎn),也就是說my_mc的注冊(cè)點(diǎn)在中心,如果你在制作過程中發(fā)現(xiàn)與本演示不同,那一定是你的my_mc注冊(cè)點(diǎn)沒有在中心上。
彈性中的能量損失
在上面的例子,小球在回彈時(shí)我們?cè)O(shè)定當(dāng)碰到邊界時(shí)直接回彈,也就是vx*=-1;并沒有能量的損失,但在現(xiàn)實(shí)生活中,小球在回彈時(shí)要有一定的能量損失,其中還要有重力加速度的影響,通過上面的例子我們可以得出結(jié)論,當(dāng)回彈速度設(shè)為1時(shí)無能量損失,其中的負(fù)號(hào)只是代表方向,當(dāng)小于1時(shí)會(huì)產(chǎn)生能量損失,也就是我們通常說的摩擦,如:vx*=-0.8;同時(shí)不要忘了在現(xiàn)實(shí)生活小球還會(huì)受重力加速度的影響。
代碼: top=0; left=0; right=400; bottom=300; //設(shè)定重力加速度變量garv garv=.5; vx = 10; vy = 10; onEnterFrame = function () { //y軸方向的加速度 vy+=garv; my_mc._x += vx; my_mc._y += vy; if(my_mc._x+my_mc._width/2>right){ my_mc._x=right-my_mc._width/2; vx*=-0.8; } if(my_mc._x-my_mc._width/2<left){ my_mc._x=left+my_mc._width/2; vx*=-0.8; } if(my_mc._y-my_mc._height/2<top){ my_mc._y=top+my_mc._height/2; vy*=-0.8; } if(my_mc._y+my_mc._height/2>bottom){ my_mc._y=bottom-my_mc._height/2; vy*=-0.8; } };
演示:
5.摩擦力
摩擦力的應(yīng)用相對(duì)比較簡(jiǎn)單,我們需要定義一個(gè)摩擦系數(shù),通常它的值為小于1,然后將它與速度相乘,也就是前面在彈性時(shí)所提到的能量損失。
代碼: fraction=0.95; vx=10; vy=10; onEnterFrame=function(){ vx*=fraction; vy*=fraction; my_mc._x+=vx; my_mc._y+=vy; } 演示:
出處:WebStudio
責(zé)任編輯:qhwa
上一頁 加速度和重力 下一頁 拖動(dòng)與拋、緩沖
◎進(jìn)入論壇Flash專欄版塊參加討論
|