申繼年
在物理課程的學(xué)習(xí)過程中,涉及物理學(xué)家的知識(shí),是必須掌握的。這部分知識(shí)的教學(xué)若以單調(diào)的形式表現(xiàn),學(xué)生會(huì)感覺非??菰?在一定程度上也會(huì)影響學(xué)生對(duì)這部分知識(shí)的掌握。
教育游戲憑借其活潑的形式,越來越受到教育界的重視。它可以通過圖文并茂的游戲環(huán)境來提高學(xué)生的學(xué)習(xí)積極性,激發(fā)學(xué)生的學(xué)習(xí)興趣,改變以前單調(diào)的學(xué)習(xí)形式。下面,就介紹一款較常用的Flash游戲的制作過程及其部分源程序,來幫助學(xué)生認(rèn)識(shí)物理學(xué)家。
● 游戲簡(jiǎn)介
游戲界面如圖1所示。
游戲運(yùn)行時(shí),在界面的左上角出現(xiàn)任務(wù)提示,給出一位物理學(xué)家對(duì)于物理學(xué)貢獻(xiàn)的描述。要求學(xué)生從界面中逐漸下落的4個(gè)物理學(xué)家的頭像圖片中(上面寫著物理學(xué)家的名字),選出問題答案。在圖片逐漸下落到界面底部的時(shí)間內(nèi),學(xué)生可用被替換成魔法棒的鼠標(biāo)點(diǎn)擊選擇。如果答案正確,屏幕右上角的分?jǐn)?shù)欄會(huì)自動(dòng)加上10分;如果錯(cuò)誤或沒有選擇都不會(huì)加分。答案正確或錯(cuò)誤,會(huì)出現(xiàn)不同的聲音提示。當(dāng)一個(gè)任務(wù)完成,會(huì)自動(dòng)進(jìn)入下一個(gè)任務(wù)。
教材中單調(diào)的有關(guān)物理學(xué)家的教學(xué)內(nèi)容轉(zhuǎn)換成了生動(dòng)的Flash游戲,不僅使學(xué)生在游戲的過程中完成對(duì)知識(shí)的掌握,同時(shí)也增加了學(xué)生的學(xué)習(xí)興趣和學(xué)習(xí)的主動(dòng)性。
● 制作思路
游戲的主時(shí)間軸如圖2所示。
游戲設(shè)計(jì)成一幀,包括游戲的初始化和核心功能兩部分。游戲的初始化包括鼠標(biāo)的隱藏和替換,鼠標(biāo)事件函數(shù)的監(jiān)聽,還有聲音的加載等;游戲的核心功能主要有任務(wù)提示(隨機(jī)出現(xiàn))、圖形的下落、選擇、判斷、加分和循環(huán)等。
游戲設(shè)計(jì)為四層:第一層放置Action Scrip代碼;第二層放置顯示分?jǐn)?shù)的動(dòng)態(tài)文本;第三層放置任務(wù)提示的動(dòng)態(tài)文本;第四層設(shè)置為遮罩層,用于放置問題的影片剪輯。
● 制作步驟
1.素材制作
本軟件素材包括圖片、聲音和影片剪輯,其素材庫(kù)結(jié)構(gòu)如圖3所示。
下面主要介紹鼠標(biāo)特效“mouse”和供選擇的物理學(xué)家“man”兩個(gè)影片剪輯的制作方法。
鼠標(biāo)特效有兩種狀態(tài):其一為正常狀態(tài),即鼠標(biāo)未點(diǎn)擊前的狀態(tài);其二是鼠標(biāo)左鍵點(diǎn)擊選擇答案的狀態(tài)。這兩種狀態(tài)下,已被魔術(shù)棒替換的鼠標(biāo)指針呈現(xiàn)不同的特效。所以,“mouse”影片剪輯分為兩個(gè)關(guān)鍵幀,第一幀為鼠標(biāo)未點(diǎn)擊前的狀態(tài),第二幀為鼠標(biāo)左鍵點(diǎn)擊下的狀態(tài)。時(shí)間軸如圖4所示。
“man”影片剪輯分為四個(gè)關(guān)鍵幀,每一幀都是一個(gè)物理學(xué)家的頭像,并用遮罩層作為修飾(如mask圖層),以便選中時(shí)做出對(duì)與錯(cuò)的顯示。其中每個(gè)關(guān)鍵幀上都有”stop”腳本,只控制播放其中的一幀。該影片剪輯在時(shí)間軸上如圖5所示。
2.代碼編寫
游戲代碼分為兩部分,一部分是游戲的初始化,另一部分是游戲的核心功能的實(shí)現(xiàn)。
(1)第一部分游戲的初始化,包括聲音加載、鼠標(biāo)特效和任務(wù)提示數(shù)組的創(chuàng)建等功能,具體代碼如下。
①聲音加載模塊:
myFire = new Sound();
myFire.attachSound("Fire.WAV");// 加載鼠標(biāo)單擊的特效聲音
myError = new Sound();
myError.attachSound("Error.WAV");// 加載答案選擇錯(cuò)誤的特效聲音
myRight = new Sound();
myRight.attachSound("Right.WAV");// 加載答案選擇正確的特效聲音
②鼠標(biāo)特效模塊:
Mouse.hide();//原鼠標(biāo)隱藏
this.attachMovie("mouse", "mouse", 5000);//運(yùn)行時(shí)導(dǎo)入鼠標(biāo)特效影片
mouse._x = mc._x;
mouse._y = mc._y;
var mouseStyle:Object = new Object();//鼠標(biāo)偵聽事件
//當(dāng)鼠標(biāo)移動(dòng)時(shí)保持影片與鼠標(biāo)位置一致
mouseStyle.onMouseMove = function()
{
mouse._x = _xmouse;
mouse._y = _ymouse;
updateAfterEvent();
};
//當(dāng)鼠標(biāo)按下時(shí)影片進(jìn)入并播放“mouse”影片剪輯的第二幀
mouseStyle.onMouseDown = function()
{
mouse.gotoAndPlay(2);
};
//創(chuàng)建鼠標(biāo)偵聽事件
Mouse.addListener(mouseStyle);
③用數(shù)組創(chuàng)建任務(wù)提示模塊:
var qArr:Array = new Array(4);
var qArrNum:Array = new Array(0, 1, 2, 3);
qArr[0] = "他發(fā)現(xiàn)并解釋了光電效應(yīng);揭示了質(zhì)量與能量的關(guān)系;提出了狹義相對(duì)論和廣義相對(duì)論。";
qArr[1] = "他在電學(xué)、電化學(xué)、電磁學(xué)領(lǐng)域做出過杰出貢獻(xiàn);發(fā)現(xiàn)了電磁感應(yīng)現(xiàn)象;畢生致力研究場(chǎng)的理論。";
qArr[2] = "他根據(jù)實(shí)驗(yàn)提出了電學(xué)中的基本定律;以他的名字命名電量的基本單位;設(shè)計(jì)出一種新型測(cè)力儀器——扭秤。";
qArr[3] = "他最重要的貢獻(xiàn)是建立電路定律;論述了電流的電磁力的衰減與導(dǎo)線長(zhǎng)度的關(guān)系;以他的名字命名電阻的單位。";
④定義變量并初始化:
var qID:Number = null;
var answer:Number = null;
var yourAns:Number = null;
var gameStart:Boolean = false;
var yourScore:Number = 0;
(2)第二部分游戲核心功能的實(shí)現(xiàn),由主體函數(shù)和各功能函數(shù)組成,具體代碼如下。
①游戲主體函數(shù):
function initGame() {
gameStart = true;
setLocation();
creatQ();
moveObj();
}//end of function
initGame();//調(diào)用主體函數(shù)
②四個(gè)功能函數(shù):
//設(shè)置“man”影片剪輯的初始位置與響應(yīng)鼠標(biāo)事件
function setLocation() {
for (var i = 0; i<4; i++) {
this["a"+i]._y = -80;
this["a"+i]._x = 60+140*i;
this["a"+i].gotoAndStop(i+1);
this["a"+i].rOw.gotoAndStop(1);
this["a"+i].onPress = function() {
if (gameStart == true) {
gameStart = false;
yourAns = Number(this._name.
substr(1));
checkResult(this);
}
};
}//end of for
}//end of function
//隨機(jī)生成任務(wù)
function creatQ():Void {
if (qArr.length>0) {
qID = Math.floor(Math.random()*qArr.
length);
dt_q.text = qArr[qID];
answer = qArrNum[qID];
qArr.splice(qID,1);
qArrNum.splice(qID,1);
} else {
dt_q.text = "Game Over";
moveObj = null;
delete moveObj;
this.onEnterFrame = null;
delete this.onEnterFrame;
for (var i = 0; i<4; i++) {
this["a"+i].onPress = null;
}
}
}
//控制“man”影片剪輯的運(yùn)動(dòng)
function moveObj():Void {
this.onEnterFrame = function() {
for (var i = 0; i<4; i++) {
this["a"+i]._y += 5;
updateAfterEvent();
if (this["a"+i]._y>=500) {
initGame();
}
}
};
}
//判斷所選擇的答案正確與否,并進(jìn)行計(jì)分操作
function checkResult(obj:MovieClip):Void {
if (answer == yourAns) {
yourScore += 10;
dt_score.text = yourScore;
obj.rOw.gotoAndStop("right");
} else {
obj.rOw.gotoAndStop("wrong");
}
}
至此,本游戲主體部分就制作完成了,其游戲特征還比較薄弱,情景性、競(jìng)爭(zhēng)性還需進(jìn)一步加強(qiáng)。用戶可以在此基礎(chǔ)上設(shè)置更加引人入勝的情境,加入競(jìng)爭(zhēng)機(jī)制,增加其游戲性;也可以根據(jù)自己的需要,增加任務(wù)的數(shù)量,添加更多的知識(shí)內(nèi)容,使學(xué)生通過游戲真正達(dá)到掌握知識(shí)的目的。