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