張明明
(滕州市中等職業(yè)教育中心學(xué)校機(jī)械電氣部 山東 滕州 277500)
機(jī)械波模型是高中及中職物理教學(xué)中十分重要的物理模型.在傳統(tǒng)教學(xué)中,教師上課時(shí)總要拿著沉重的機(jī)械波模型進(jìn)行模擬,十分不便,而學(xué)生的觀察效果也不理想.雖然在一些光盤(pán)或互聯(lián)網(wǎng)上也能找到一些別人制作的“機(jī)械波”課件,卻總感覺(jué)與自己的教學(xué)思路不能完全匹配,不能按照自己的意愿隨意修改.于是筆者常想自己制作“機(jī)械波”課件,能夠比較容易地改變頻率、波長(zhǎng)和振幅的大小,以便能給學(xué)生方便地演示和解釋機(jī)械波的傳播原理及各種特性的含義.
本人在學(xué)習(xí)Flash ActionScript 3.0腳本設(shè)計(jì)語(yǔ)言的過(guò)程中,摸索出制作“機(jī)械波”模型的方法.現(xiàn)在總結(jié)成文,期望與同行共同切磋.由于每位教師的教學(xué)思路都不一樣,如果大家都能夠?qū)W習(xí)一點(diǎn)Flash動(dòng)畫(huà)制作及一些簡(jiǎn)單的編程語(yǔ)言,就可以制作出完全切合自己教學(xué)思路的課件,增加自己的課堂色彩.
下面筆者詳細(xì)介紹一下自己的“機(jī)械波”課件的制作過(guò)程和思路.
打開(kāi)Flash CS3,創(chuàng)建一個(gè)新的文檔,默認(rèn)舞臺(tái)大小為“550×400 pixels”.打開(kāi)“新建元件”對(duì)話框,創(chuàng)建一個(gè)名字為“zenz”的影片剪輯,使用繪圖工具在影片剪輯的中央位置繪制一個(gè)大小為5 pixels的圓形.打開(kāi)“庫(kù)”面板,右擊剛才創(chuàng)建的元件“zenz”,在彈出的快捷菜單中選擇“鏈接…”命令,打開(kāi)“鏈接屬性”對(duì)話框,勾選“為ActionScript導(dǎo)出”復(fù)選框,此時(shí)“類”和“基類”兩個(gè)文本框被激活并添加了默認(rèn)值,如圖1所示.
圖1
本課件所需要繪制的圖形就這一個(gè),注意不要畫(huà)到舞臺(tái)上,本課件所展示的圖形全部是由代碼控制產(chǎn)生的(當(dāng)然如果想畫(huà)一些參考線,可以在舞臺(tái)的最下面一層添加).下面就進(jìn)入代碼編寫(xiě)階段.
將第一個(gè)圖層命名為“命令”圖層,選擇第1幀并打開(kāi)“動(dòng)作”面板,輸入以下代碼(“//”后面的文字是解釋文字):
var j:uint=0;
//定義變量j,并賦值為0.
var zhenFu:uint=100;
//定義變量zhenFu,并賦值為100.此變量控制機(jī)械波的振幅.
var boChang:uint=13;
//定義變量boChang,并賦值為13.此變量控制機(jī)械波的波長(zhǎng),它的數(shù)值實(shí)際上是兩個(gè)振子的水平間距.
var pinLv:uint=20;
//定義變量pinLv,并賦值為20.此變量控制機(jī)械波的頻率.
for (var i:uint=0; i<41; i++) {
this["zenz"+i]=new zenz();
this["zenz"+i].x=20+boChang*i;
this["zenz"+i].y=200-zhenFu*Math.sin((Math.PI/pinLv*j)-(Math.PI/pinLv*i));
addChild(this["zenz"+i]);
}
//這個(gè)for語(yǔ)句,是在舞臺(tái)上產(chǎn)生41個(gè)振子實(shí)例,實(shí)例名分別是“zenz0” 、“zenz1”、“zenz2”…“zenz40”,并按照機(jī)械波的規(guī)律分別安排了它們的位置(x,y坐標(biāo)).此機(jī)械波的起點(diǎn)在舞臺(tái)上的(20,200)點(diǎn),終點(diǎn)在(540,200)點(diǎn).
functionmysin() {
//定義函數(shù)mysin,后面要不斷調(diào)用,才能使機(jī)械波的形態(tài)不斷地變換.
j=j+1;
if (j>(2*pinLv)) {
j=j-(2*pinLv);
}
//讓變量j不斷增加,并用一個(gè)if語(yǔ)句控制它的數(shù)值在一定范圍內(nèi)循環(huán)變化.
for (i=0; i<41; i++) {
this["zenz"+i].x=20+boChang*i;
this["zenz"+i].y=200-zhenFu*Math.sin((Math.PI/pinLv*j)-(Math.PI/pinLv*i));
}
//這個(gè)for語(yǔ)句是在j為某一個(gè)值的時(shí)候,讓前面產(chǎn)生的41個(gè)振子實(shí)例按照正弦波的規(guī)律重新排好位置.
}
//函數(shù)mysin定義結(jié)束.
setInterval(mysin,20);
//此語(yǔ)句讓計(jì)算機(jī)每20 ms運(yùn)行一次函數(shù)mysin,這樣就能產(chǎn)生出連續(xù)不斷運(yùn)動(dòng)的機(jī)械波了.
如果代碼到此為止,運(yùn)行一下會(huì)發(fā)現(xiàn)舞臺(tái)上會(huì)出現(xiàn)一個(gè)由41個(gè)振子組成的不斷變化的機(jī)械波,如圖2所示.
圖2 由41個(gè)振子組成的機(jī)械波
如果想比較方便地改變它的頻率、波長(zhǎng)和振幅,還需要增加一些控制按鈕.
在舞臺(tái)上新創(chuàng)建一個(gè)圖層并命名為按鈕,執(zhí)行“窗口”→“公用庫(kù)”→“按鈕”命令打開(kāi)按鈕庫(kù),分別選擇classic buttons→playback文件夾中的gel Left按鈕和gel Right按鈕,將它們拖放到舞臺(tái)的下部,再分別復(fù)制兩次,在舞臺(tái)上建立6個(gè)按鈕實(shí)例.插入3個(gè)靜態(tài)文本,內(nèi)容分別為“振幅”、“波長(zhǎng)”和“頻率”.調(diào)整按鈕和文本的位置,如圖3所示.
圖3
選中第一個(gè)按鈕,打開(kāi)“屬性”面板,設(shè)置它的實(shí)例名為“zhenJ”,如圖4所示.
圖4
依次選中另外5個(gè)按鈕,打開(kāi)“屬性”面板,分別設(shè)置它們的實(shí)例名為 “zhenZ”、“boJ”、“boZ”、“pinJ”和“pinZ”.
再次選擇“命令”圖層第1幀,打開(kāi)“動(dòng)作”面板,在前面的代碼后面接著輸入以下代碼:
zhenJ.addEventListener(MouseEvent.MOUSE_DOWN,myzhenJ);
functionmyzhenJ(e:MouseEvent ) {
if (zhenFu>10) {
zhenFu=zhenFu-5;
} else {
zhenFu=zhenFu;
}
}
//在按鈕“zhenJ”上注冊(cè)一個(gè)鼠標(biāo)事件的偵聽(tīng)函數(shù)myzhenJ,使鼠標(biāo)單擊此按鈕時(shí),變量“zhenFu”的數(shù)值減小5,并用一個(gè)if語(yǔ)句控制變量“zhenFu”的數(shù)值最小為10.用戶通過(guò)點(diǎn)擊此按鈕可以減小機(jī)械波的振幅.
zhenZ.addEventListener(MouseEvent.MOUSE_DOWN,myzhenZ);
functionmyzhenZ(e:MouseEvent ) {
zhenFu=zhenFu+5;
}
//在按鈕“zhenZ”上注冊(cè)一個(gè)鼠標(biāo)事件的偵聽(tīng)函數(shù)myzhenZ,使鼠標(biāo)單擊此按鈕時(shí),變量“zhenFu”的數(shù)值增大5.用戶通過(guò)點(diǎn)擊此按鈕可以增大機(jī)械波的振幅.
用類似的方法可以給按鈕“boJ”、“boZ”、“pinJ”和“pinZ”添加控制代碼,通過(guò)改變變量“boChang”和“pinLv”的值,來(lái)調(diào)節(jié)機(jī)械波的波長(zhǎng)和頻率的大小.由于篇幅所限,不再贅述.
通過(guò)點(diǎn)擊按鈕“zhenJ”和“zhenZ”可以改變機(jī)械波的振幅,方便講解振幅的概念;通過(guò)點(diǎn)擊按鈕“boJ”和“boZ”可以改變機(jī)械波的波長(zhǎng),方便講解波長(zhǎng)的概念;通過(guò)點(diǎn)擊按鈕“pinJ”和“pinZ”可以改變振子的振動(dòng)頻率,模擬在一般介質(zhì)中,機(jī)械波的頻率與波長(zhǎng)成反比的特點(diǎn).
廣大的同行如果都能理解本課件的代碼,就可以隨心所欲地修改它,滿足自己教學(xué)的需求.希望同行與筆者聯(lián)系,交流經(jīng)驗(yàn),共同進(jìn)步,為我國(guó)的中等職業(yè)物理教學(xué)事業(yè)做出更大的貢獻(xiàn).