徐衛(wèi)東
平拋運(yùn)動(dòng)是物理教學(xué)曲線運(yùn)動(dòng)的重要實(shí)例,直接影響到我們對(duì)力與運(yùn)動(dòng)關(guān)系的理解,影響到我們對(duì)帶電粒子在電場(chǎng)中偏轉(zhuǎn)的認(rèn)識(shí)和處理。筆者在用Flash打造平拋運(yùn)動(dòng)的頻閃圖片時(shí),有意識(shí)地將平拋運(yùn)動(dòng)與自由落體運(yùn)動(dòng)和勻速運(yùn)動(dòng)相對(duì)比。
一、平拋運(yùn)動(dòng)的實(shí)現(xiàn)
平拋運(yùn)動(dòng)可以看成是水平方向的勻速運(yùn)動(dòng)和豎直方向的自由落體運(yùn)動(dòng)的合運(yùn)動(dòng),即
水平方向:;
豎直方向:
首先,確定平拋運(yùn)動(dòng)的對(duì)象。新建一個(gè)MC,繪制一個(gè)小球,放到主場(chǎng)景中,實(shí)例命名為“ball”,作為實(shí)現(xiàn)平拋運(yùn)動(dòng)的小球。
其次,對(duì)象初始化。在主場(chǎng)景中新建代碼層,在第一幀上寫(xiě)下代碼:
a = 0.1;
b = 8;
j = 0;
y0 = getProperty("ball",_y);
x0 = getProperty("ball",_x);
stop ();
接下來(lái),實(shí)現(xiàn)對(duì)象的平拋運(yùn)動(dòng)。在代碼層第二幀寫(xiě)下代碼:
if (i<80) {
y1=y0+a*j*j;
x1=x0+b*j;
setProperty ("ball", _y, y1);
setProperty ("ball", _x, x1);
} else {
stop ();
}
j = j+1;
在代碼層第三幀寫(xiě)下代碼:
gotoAndPlay (2);
二、頻閃圖片的實(shí)現(xiàn)
頻閃圖片的特點(diǎn)是在同一張照片上表現(xiàn)出動(dòng)作的連續(xù)性,有很直觀的動(dòng)態(tài)感。每次閃光時(shí)應(yīng)聽(tīng)到快門(mén)聲并同時(shí)留下小球到達(dá)某一位置的影像。為了實(shí)現(xiàn)具有真實(shí)感和現(xiàn)場(chǎng)感的頻閃圖片,我們應(yīng)完成以下工作:
1.像的位置設(shè)置
當(dāng)對(duì)象“ball”運(yùn)動(dòng)到某一特定位置時(shí),復(fù)制該對(duì)象。在代碼層的第二幀的條件語(yǔ)句中添加代碼:
if ( i==14 or i==29 or i==44 or i==59 or i==74) {
duplicateMovieClip ("ball", "ball"+i, i+100);
setProperty ("ball"+i, _y, y1);
setProperty ("ball"+i, _x, x1);
}
2.光的設(shè)置
新建一個(gè)MC,繪制一個(gè)填充色為白色的矩形,拖到主場(chǎng)景中盡量放大一些。實(shí)例命名為“shanguang”(即閃光)。
在代碼層的第一幀上添加代碼:
setProperty ("shanguang", _alpha, 0);
在代碼層的第二幀內(nèi)層條件語(yǔ)句中添加代碼:
setProperty ("shanguang", _alpha, 100);
else {
setProperty ("shanguang ", _alpha, 0);}
3.快門(mén)聲音的設(shè)置
從共享圖庫(kù)中導(dǎo)入快門(mén)聲音。打開(kāi)[圖庫(kù)]找到所需的聲音剪輯,右鍵單擊選中[連接]。在標(biāo)識(shí)符中填入符號(hào)sound1,選中[連接]的[輸出此符號(hào)]。
在代碼層寫(xiě)入控制聲音的代碼。第一幀實(shí)現(xiàn)聲音的綁定,代碼如下:
mysound = new Sound( );
mysound.attachSound("sound1");
第二幀用以實(shí)現(xiàn)聲音的循環(huán),添加代碼:
mysound.start();
下面所示腳本為平拋運(yùn)動(dòng)和由其分解的水平方向勻速運(yùn)動(dòng)和豎直方向自由落體運(yùn)動(dòng)的頻閃圖片的源代碼:
第一幀代碼:
a = 0.1;
b = 10;
i = 0;
y0 = getProperty("ball",_y);
x0 = getProperty("ball",_x);
注意,復(fù)制MC時(shí),深度不能相同,否則不能正常顯示。
duplicateMovieClip ("ball", "ball0", 1);
duplicateMovieClip ("balla", "balla0", 99);
//“balla”為自由落體小球的實(shí)例名
duplicateMovieClip ("ballb", "ballb0", 299);
//“ballb”為勻速直線運(yùn)動(dòng)小球?qū)嵗?/p>
setProperty ("shanguang ", _alpha, 0);
col1 = 0xffff00;
col2 = 0xccff99;
col3 = 0x99cc00;
//三小球圖像的顏色各不相同,需要初始化顏色
mysound = new Sound( );
mysound.attachSound("sound1" );
stop ();
第二幀代碼:
if (i<80) {
y1=y0+a*i*i;
x1=x0+b*i;
setProperty ("ball", _x, x1);//使“ball”作平拋運(yùn)動(dòng)(x,y坐標(biāo)都變化)
setProperty ("ball", _y, y1);
setProperty ("balla", _y, y1);//使“balla”作自由落體運(yùn)動(dòng)(僅y坐標(biāo)變化)
setProperty ("ballb", _x, x1);//使“ballb”作勻速運(yùn)動(dòng)(僅x坐標(biāo)變化)
zxcol1 = new Color( "ball"+i);
zxcol2 = new Color( "balla"+i);
zxcol3 = new Color( "ballb"+i);
zxcol1.setRGB(col1);
zxcol2.setRGB(col2);
zxcol3.setRGB(col3);//設(shè)置三個(gè)小球圖像的顏色
if ( i==14 or i==29 or i==44 or i==59 or i==74) {
//每隔一定的幀數(shù)對(duì)三個(gè)小球分別復(fù)制一個(gè)MC,相當(dāng)于定時(shí)頻閃。
duplicateMovieClip ("ball0", "ball"+i, i+100);
setProperty ("ball"+i, _y, y1);
setProperty ("ball"+i, _x, x1);
duplicateMovieClip ("balla0", "balla"+i, i+299);
setProperty ("balla"+i, _x, x1);
duplicateMovieClip ("ballb0", "ballb"+i, i);
setProperty ("ballb"+i, _y, y1);
setProperty ("shanguang ", _alpha, 100);
mysound.start(); //閃光時(shí)發(fā)出快門(mén)聲
} else {
setProperty ("shanguang ", _alpha, 0);
}
} else {
stop ();
}
i = i+1;
4.閃光圖片的清除
當(dāng)需要重復(fù)演示時(shí),必須清除前面復(fù)制的MC,用removeMovieClip命令,寫(xiě)入代碼:
on (release) {
removeMovieClip ("ball0");
removeMovieClip ("ballb74");
//重新初始化三個(gè)小球的位置
setProperty ("ball", _y, y0);
setProperty ("ball", _x, x0);
setProperty ("balla", _y, y0);
setProperty ("balla", _x, x0);
setProperty ("ballb", _y, y0);
setProperty ("ballb", _x, x0);
gotoAndStop (1);