用Flash mx 2004制作三角函數(shù)圖像生成器非常簡單,這里我們就用正弦曲線為例子,看一看在flash中如何實(shí)現(xiàn)函數(shù)圖像的。
先來分析一下這個生成器的功能,在程序主界面的輸入框中,輸入相應(yīng)的振幅、頻率或初相值,然后按下“sin”按鈕,會出現(xiàn)坐標(biāo)軸和一條動態(tài)生成的函數(shù)曲線,如果修改了相應(yīng)的輸入值,生成器又會在原來的圖像基礎(chǔ)上再生成一條不同顏色函數(shù)曲線,這樣更容易使人了解不同的值造成的函數(shù)圖像的變化,從而能夠使用戶更清楚的了解這個三角函數(shù)公式的各項(xiàng)的含義.
制作這個sin函數(shù)圖像生成器的具體步驟如下:
第一步,制作元件
在這個生成器中共需要四個元件。兩個按鈕元件,一個是開始生成按鈕“sin”,一個是清除圖像按鈕“清除”;兩個影片剪輯,一個剪輯中用鉛筆工具在編輯區(qū)中央畫一個點(diǎn),因?yàn)樵谑褂弥幸罅繌?fù)制這個點(diǎn),使點(diǎn)連成函數(shù)曲線用的,所以要大小合適,另一個影片剪輯中畫上平面直角坐標(biāo)系。
第二步,設(shè)計(jì)場景界面
場景上先放置三個“輸入文本”框,這是用來輸入不同數(shù)值的。文本框左邊用“靜態(tài)文本”標(biāo)識三個“輸入文本”框的作用,從上至下依次是,振幅,頻率和初相,這三“輸入文本”框的變量名至上而下依次是“hight”、“freq”、“c”。然后把“sin”、“清除”這兩個按鈕從庫中拖動到合適位置。在右邊用“靜態(tài)文本”寫出“Y =<空格>sin(<空格>X+<空格>)”,然后在空格處放置三個“動態(tài)文本”框,用于顯示所輸入三角函數(shù)的具體公式,三個“動態(tài)文本”框的變量名稱從左至右分別是“QQ”、“ww”、“ee”。這些就構(gòu)成了這個圖像生成器的主要界面。
第三步、加入代碼
在這個生成器中,一共需要六層四幀,層數(shù)可以根據(jù)需要修改。
第一層是背景層。
第二層是坐標(biāo)層,在該層的第二幀插入關(guān)鍵幀,然后在該幀拖入“坐標(biāo)”元件,放在場景外的區(qū)域中,該元件的“實(shí)例名稱”叫做“zuobiao”。
第三層中將“點(diǎn)”元件拖進(jìn)來,實(shí)例名稱是“point1”;第四層是代碼層,用于編寫程序,這一層的四幀全部轉(zhuǎn)換成關(guān)鍵幀。
剩下的兩層用來放置按鈕和上一步提到的各種文本框。
多分幾層可以方便以后的修改,所以在做flash的時候應(yīng)該注意這個細(xì)節(jié),不要把所有的內(nèi)容都塞到一個層里。
接下來開始寫一點(diǎn)生成函數(shù)曲線的代碼,注意我們要把所有的代碼都寫在“代碼”層里。
第一幀代碼:
k=20000; //設(shè)置部分變量的初始值
j=0;,
第二幀代碼:
i = 0;
draw = 1;
j=j+1; //定義變量
duplicateMovieClip("point1", "point",67778);
setProperty("point", _x, 320);
setProperty("point", _y, 240); //把場景外面的“點(diǎn)”剪輯“point1”復(fù)制成一個//名為“point”的剪輯置于場景中央
xpos = _root.point._x;
duplicateMovieClip("zuobiao", "zuobiao1",1);
setProperty("zuobiao", _x,220);
setProperty("zuobiao", _y,240);//把場景外面的坐標(biāo)剪輯“zuobiao”復(fù)制成一個//名為“zuobiao1”的剪輯置于場景中央
xpos = _root.point._x;
ypos = _root.point._y;
stop();
第三幀代碼:
do { //通過循環(huán),大量復(fù)制“point”,通過sin 函數(shù)的約束,//使這些點(diǎn)分布在合理曲線上形成正弦曲線
duplicateMovieClip("point", "point"+i, k);
setProperty("point"+i, _x, i-22);
= getProperty("point"+i, _x);
setProperty("point"+i, _y,ypos-hight*Math.PI*10*func((/(Math.PI*10))*freq));
v=c % (2*Math.PI);
setProperty("point"+i, _x, i-(v*Math.PI*10)-196);
bodyColor = new Color("point"+i); //使每次按下“sin”按鈕后生成的曲線顏色有所//區(qū)別,這樣可以使曲線分辨起來更清晰
r = (j%5) +1;
if(r == 1) {
bodyColor.setTransform({rb: 255,bb:0,gb:0});
}
else if (r == 2) {
bodyColor.setTransform({gb: 255,rb:0,bb:0});
}
else if(r == 3) {
bodyColor.setTransform({rb: 255,gb: 255,bb:0});
}else if (r == 4) {
bodyColor.setTransform({gb: 255,bb: 255,rb:0});
} else {
bodyColor.setTransform({bb: 255,rb:255,gb:255});
}
i = i+1;
k++;
draw = draw+1;
} while (draw<=20);
第四幀代碼:
if (number(i)>=1060) {//給循環(huán)一個約束條件,是程序在適當(dāng)?shù)臅r候停止
gotoAndPlay(2);
k-=2400;
} else {
draw = 1;
gotoAndPlay(3);
}
“sin”按鈕的代碼:
on (release) { // 按下按鈕后主界面顯示生成正弦曲線的具體公式,//并開始生成執(zhí)行函數(shù)生成曲線。
QQ=hight;
ww=freq;
ee=c;
func = Math.sin;
gotoAndPlay(3);
}
“清除”按鈕的代碼
on (release) { //清除所有已經(jīng)出現(xiàn)的曲線
for (n=0;n<=1060;n++)
{removeMovieClip("point"+n);
// k+=2400;
};
}
這個生成器程序在flash mx 2004 和flash mx 兩個版本中均可以正常運(yùn)行。在編寫時因?yàn)榭紤]可能并不十分周到,所以有些數(shù)值在其他的環(huán)境下需要修改.
完成效果如下,大家可以根據(jù)上面的描述動手試試課件的實(shí)際效果: