摘 要:面向?qū)ο笳n件設(shè)計(jì)思想一直為大家所談?wù)摚瑢?shí)踐中卻很難找到相關(guān)案例。類是實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)的基礎(chǔ),利用類的優(yōu)勢(shì)在于對(duì)象的重復(fù)利用效率。本文結(jié)合杠桿模型課件的設(shè)計(jì)方法介紹AS中類的應(yīng)用。
關(guān)鍵詞:類;Flash課件;文檔類;元件綁定類
中圖分類號(hào):TB23-4
通常做課件是依據(jù)教師的教學(xué)流程設(shè)計(jì)呈現(xiàn)相應(yīng)的內(nèi)容,方法簡(jiǎn)潔,但課件通用性一般較差,因?yàn)榻虒W(xué)流程是預(yù)設(shè)的,無(wú)法適應(yīng)復(fù)雜的課堂教學(xué)情況。因此現(xiàn)在課件制作并不要求制作完整的課堂教學(xué)過(guò)程課件,課件制作過(guò)程中可以擺脫對(duì)時(shí)間軸的依賴,下面以設(shè)計(jì)和制作一個(gè)交互性強(qiáng)、仿真度高的杠桿模型為例,介紹利用類來(lái)進(jìn)行課件開(kāi)發(fā)。
面向?qū)ο蟮恼n件設(shè)計(jì)方法是一種趨勢(shì)、一種設(shè)計(jì)和開(kāi)發(fā)課件的更高效的方法。
(1)如果從類的角度看,面向?qū)ο蟮恼n件設(shè)計(jì)首先要抽象出所需要的類,可以從兩個(gè)角度來(lái)考慮課件中需要的類:一是從課件內(nèi)容出發(fā),課件中需要的具體的實(shí)際的對(duì)象,如本示例中需要的砝碼等。二是從課件功能出發(fā),如需要幫助提示信息、畫(huà)板演示等。
(2)設(shè)計(jì)類的屬性和功能,如砝碼應(yīng)當(dāng)可以移動(dòng),可以被懸掛在杠桿上等。
1 課件結(jié)構(gòu)設(shè)計(jì)及類的設(shè)計(jì)
杠桿模型課件實(shí)現(xiàn)一個(gè)杠桿模型(杠桿和一組砝碼),學(xué)習(xí)者可以隨意的往杠桿上增減砝碼,通過(guò)實(shí)驗(yàn)探究出杠桿平衡的條件。
課件中的交互主要是砝碼的“拿起”和“放下”,使用者通過(guò)鼠標(biāo)操作可以很自然地完成往杠桿上增減砝碼的操作。
根據(jù)課件需要實(shí)現(xiàn)的功能,設(shè)計(jì)三個(gè)類:
一個(gè)為Hook類,用來(lái)定位和記錄砝碼的位置和個(gè)數(shù)等屬性。
另一個(gè)Weight類,用來(lái)定義和實(shí)現(xiàn)砝碼屬性和移動(dòng)操作。
還有一個(gè)Lever類,用來(lái)定義杠桿的平衡條件。
課件的整體設(shè)計(jì)思路:
(1)課件中的砝碼元件由其綁定類(weight.as)定義其屬性:myfather(記錄本砝碼的上一個(gè)砝碼)、mychild(記錄本砝碼的下一個(gè)砝碼)、hookname(用于存儲(chǔ)砝碼所在的掛鉤)、x0,y0(記錄砝碼所在的初始位置)。并且,在weight.as中編寫(xiě)代碼偵聽(tīng)鼠標(biāo)單擊砝碼,釋放鼠標(biāo)和移動(dòng)鼠標(biāo)等行為,并作出相應(yīng)的反應(yīng)。
(2)課件中的掛鉤元件(在杠桿上,用于懸掛砝碼)由其綁定類(Hook)定義相關(guān)屬性:numChild(記錄掛鉤下砝碼的個(gè)數(shù))和dx(存儲(chǔ)掛鉤離支點(diǎn)的距離,用于計(jì)算力矩)。
(3)由文檔類(lever.as)控制課件中的所有對(duì)象(1個(gè)杠桿、6個(gè)砝碼),實(shí)時(shí)計(jì)算杠桿左右兩邊的力矩,并根據(jù)計(jì)算的結(jié)果使杠桿發(fā)生旋轉(zhuǎn)。
2 素材準(zhǔn)備
(1)新建AS3.0文檔,保存為lever.fla文件,并創(chuàng)建鐵架臺(tái)、杠桿主體和砝碼三個(gè)影片剪輯元件。
(2)創(chuàng)建Hook.as和Weight.as類文件,并且分別與庫(kù)中的掛鉤和砝碼元件想綁定。
(3)創(chuàng)建Lever.as類文件,并與Lever.fla文檔綁定。
3 功能實(shí)現(xiàn)
3.1 Hook類的實(shí)現(xiàn)(Hook.as文件的主要內(nèi)容)
package{
import flash.display.MovieClip;
public class Hook extends MovieClip{
public var mychild:MovieClip; //應(yīng)用存放掛鉤下的勾碼
public var numChild:uint; //紀(jì)錄掛鉤下勾碼的個(gè)數(shù);
public function Hook():void{
mychild=1;
numChild=0; //開(kāi)始時(shí),掛鉤下勾碼個(gè)數(shù)為0;
}
}
}
3.2 Weight類的實(shí)現(xiàn)(Weight.as文件的主要內(nèi)容)
package{
import flash.geom.Point;
public var hookName:MovieClip;
public function Weight():void{
this.buttonMode=true;
myfather=mychild=hookName=1;
x0=this.x;
y0=this.y;
this.addEventListener(MouseEvent.MOUSE_DOWN,mouse_down);
this.addEventListener(MouseEvent.MOUSE_UP,mouse_up);
}
}
3.3 Lever類的實(shí)現(xiàn)(Lever.as文件的主要內(nèi)容)
package{
import flash.display.MovieClip;
public class Lever extends MovieClip{
//定義杠桿不平衡時(shí)旋轉(zhuǎn)的速度
private var speed:Number=2;
//注冊(cè)偵聽(tīng)器
this.addEventListener(Event.ENTER_FRAME,frame_loop);
private function frame_loop(evt:Event):void{
//計(jì)算兩邊力矩
for(var i:uint=0;i if(hooks[i].x>0){ m1+=hooks[i].x*hooks[i].numChild; }else{ m2+=hooks[i].x*hooks[i].numChild; } } } } } 參考文獻(xiàn): [1]林南.用交互式動(dòng)畫(huà)模擬物理實(shí)驗(yàn)的設(shè)計(jì)與實(shí)現(xiàn)[J].閩江學(xué)院學(xué)報(bào),2002(06). [2]周艷紅,文冬,李國(guó)林.用Flash中ActionScript語(yǔ)言開(kāi)發(fā)多媒體課件[J].福建電腦,2007(08). [3]徐彥俊,沈慧娟.Flash軟件在多媒體教學(xué)課件開(kāi)發(fā)中的應(yīng)用[J].通化師范學(xué)院學(xué)報(bào),2011(02). 作者簡(jiǎn)介:丁迎迎(1982.12-),女,山東濰坊人,專任教師,講師,工程碩士,研究方向:計(jì)算機(jī)應(yīng)用技術(shù)。 作者單位:山東經(jīng)貿(mào)職業(yè)學(xué)院,山東濰坊 261011