從機械波的形成過程來看,它是由於振動質點通過相互作用力帶動與之相鄰的質點,通過相鄰的點把振動形式傳播出去從而形成機械波,這樣就必須解決兩個問題:
1、每壹個質點都按照y=Acos(ωt+φ)的規律振動
2、不是所有的點都同時開始動的,他們有壹定的相位差,靠近波源的點先振動。
二、實現方法
這裏我只介紹橫波的模擬動畫。要使得質點振動,我們只需使它的y方向的位移按規律y=Acos(ωt+φ)變化即可,可以用這樣的語句實現
this._y=y0+r*Math.cos(j*Math.PI/180+m)
說明:y0是平衡位置的y坐標,所有點的y0都是壹樣的,ω寫成Math.PI/180,是把角度換成弧度制,
三.制作步驟
1、繪制質點小球(電影剪輯)。
進入主場景,選中橢圓工具,設置漸變色,如圖1,按住Ctrl鍵和鼠標左鍵,在主場景中畫出壹個小球。
選中小球,單擊鼠標右鍵,選擇[轉換為元件(或按F8),在彈出的對話框中選擇影片剪輯,註冊點選在中間,單擊確定按鈕把小球轉換為電影剪輯如圖2
選中小球,打開右下角的它的屬性面板,命名為my_mc如圖3
2.實現小球的運動
選中小球,打開下方的動作面板,輸入腳本, 如圖4
下面我把這段代碼作簡單解釋:
onClipEvent (load) {}表示當剪輯顯示在時間軸上時,k、r、y0被初始化,其中k的初始化可能會比較難理解,它是把該電影剪輯的名字作為它的值的,而它的名字到底又是什麽呢?後面會講到,它的名字實際上分別是0到N的整數,這樣做的目的何在呢?請往下看:
onClipEvent (enterFrame) {}是當剪輯顯示在時間軸上後,壹直重復做的事情
那就是k不斷被減2(可以任意數),再用壹個if語句判斷,如果k<=0成立,開始執行語句this._y = y0+r*Math.sin(k*1.5*Math.PI/180)使小球運動起來,大家可以發現,k越小,越快滿足k<=0,也就先動起來,那麽我們思路分析中的第二點就可以實現了,所以接下來的問題是給各個質點命名了
3、復制小球。
回到主場景,新建壹個層命名為Action,如圖5
選中該層的第壹幀,打開動作面板,寫入代碼,如圖6
可以看得出,該代碼所復制出來的電影剪輯的名稱分別是從0到50的數,這下大家明白了吧,
4、哈哈,現在妳可以試壹試妳的成果了,Ctrl+Enter壹下,還滿意嗎?
5、實現控制
要實現對以上機械波的簡單控制,,必須把代碼改壹下:
(1)、把onClipEvent (enterFrame) {}的代碼改為
onClipEvent (enterFrame) {
if (_parent.c == 0) {
if (k<=0) {
this._y = y0+r*Math.sin(k*1.5*Math.PI/180);
}
k=k- 2;
}
}
可見只是多了壹個判斷,判斷只有滿足c == 0,才會執行代碼k=k-2,才會產生小球的運動,c自然就在按鈕上賦值了。
(2)、再新建壹個層,從庫中拖入兩個按鈕放在該層,我們可以在開始按鈕上加上語句on (release) {c=0},在暫停按鈕上加上語句on (release) {c=1}。
至此,基本完成了,縱波?差不多的啦。最後奉上本教程源程序以及另壹個包含縱波的功能相對齊全的機械波源碼