在物理課程的學習過程中,涉及物理學家的知識,是必須掌握的。這部分知識的教學若以單調的形式表現,學生會感覺非常枯燥,在一定程度上也會影響學生對這部分知識的掌握。
教育游戲憑借其活潑的形式,越來越受到教育界的重視。它可以通過圖文并茂的游戲環境來提高學生的學習積極性,激發學生的學習興趣,改變以前單調的學習形式。下面,就介紹一款較常用的Flash游戲的制作過程及其部分源程序,來幫助學生認識物理學家。
● 游戲簡介
游戲界面如圖1所示。

游戲運行時,在界面的左上角出現任務提示,給出一位物理學家對于物理學貢獻的描述。要求學生從界面中逐漸下落的4個物理學家的頭像圖片中(上面寫著物理學家的名字),選出問題答案。在圖片逐漸下落到界面底部的時間內,學生可用被替換成魔法棒的鼠標點擊選擇。如果答案正確,屏幕右上角的分數欄會自動加上10分;如果錯誤或沒有選擇都不會加分。答案正確或錯誤,會出現不同的聲音提示。當一個任務完成,會自動進入下一個任務。
教材中單調的有關物理學家的教學內容轉換成了生動的Flash游戲,不僅使學生在游戲的過程中完成對知識的掌握,同時也增加了學生的學習興趣和學習的主動性。
● 制作思路
游戲的主時間軸如圖2所示。

游戲設計成一幀,包括游戲的初始化和核心功能兩部分。游戲的初始化包括鼠標的隱藏和替換,鼠標事件函數的監聽,還有聲音的加載等;游戲的核心功能主要有任務提示(隨機出現)、圖形的下落、選擇、判斷、加分和循環等。
游戲設計為四層:第一層放置Action Scrip代碼;第二層放置顯示分數的動態文本;第三層放置任務提示的動態文本;第四層設置為遮罩層,用于放置問題的影片剪輯。
● 制作步驟
1.素材制作
本軟件素材包括圖片、聲音和影片剪輯,其素材庫結構如圖3所示。

下面主要介紹鼠標特效“mouse”和供選擇的物理學家“man”兩個影片剪輯的制作方法。
鼠標特效有兩種狀態:其一為正常狀態,即鼠標未點擊前的狀態;其二是鼠標左鍵點擊選擇答案的狀態。這兩種狀態下,已被魔術棒替換的鼠標指針呈現不同的特效。所以,“mouse”影片剪輯分為兩個關鍵幀,第一幀為鼠標未點擊前的狀態,第二幀為鼠標左鍵點擊下的狀態。時間軸如圖4所示。

“man”影片剪輯分為四個關鍵幀,每一幀都是一個物理學家的頭像,并用遮罩層作為修飾(如mask圖層),以便選中時做出對與錯的顯示。其中每個關鍵幀上都有”stop”腳本,只控制播放其中的一幀。該影片剪輯在時間軸上如圖5所示。

2.代碼編寫
游戲代碼分為兩部分,一部分是游戲的初始化,另一部分是游戲的核心功能的實現。
(1)第一部分游戲的初始化,包括聲音加載、鼠標特效和任務提示數組的創建等功能,具體代碼如下。
①聲音加載模塊:
myFire = new Sound();
myFire.attachSound(\"Fire.WAV\");// 加載鼠標單擊的特效聲音
myError = new Sound();
myError.attachSound(\"Error.WAV\");// 加載答案選擇錯誤的特效聲音
myRight = new Sound();
myRight.attachSound(\"Right.WAV\");// 加載答案選擇正確的特效聲音
②鼠標特效模塊:
Mouse.hide();//原鼠標隱藏
this.attachMovie(\"mouse\", \"mouse\", 5000);//運行時導入鼠標特效影片
mouse._x = mc._x;
mouse._y = mc._y;
var mouseStyle:Object = new Object();//鼠標偵聽事件
//當鼠標移動時保持影片與鼠標位置一致
mouseStyle.onMouseMove = function()
{
mouse._x = _xmouse;
mouse._y = _ymouse;
updateAfterEvent();
};
//當鼠標按下時影片進入并播放“mouse”影片剪輯的第二幀
mouseStyle.onMouseDown = function()
{
mouse.gotoAndPlay(2);
};
//創建鼠標偵聽事件
Mouse.addListener(mouseStyle);
③用數組創建任務提示模塊:
var qArr:Array = new Array(4);
var qArrNum:Array = new Array(0, 1, 2, 3);
qArr[0] = \"他發現并解釋了光電效應;揭示了質量與能量的關系;提出了狹義相對論和廣義相對論。\";
qArr[1] = \"他在電學、電化學、電磁學領域做出過杰出貢獻;發現了電磁感應現象;畢生致力研究場的理論。\";
qArr[2] = \"他根據實驗提出了電學中的基本定律;以他的名字命名電量的基本單位;設計出一種新型測力儀器——扭秤。\";
qArr[3] = \"他最重要的貢獻是建立電路定律;論述了電流的電磁力的衰減與導線長度的關系;以他的名字命名電阻的單位。\";
④定義變量并初始化:
var qID:Number = 1;
var answer:Number = 1;
var yourAns:Number = 1;
var gameStart:Boolean = 1;
var yourScore:Number = 0;
(2)第二部分游戲核心功能的實現,由主體函數和各功能函數組成,具體代碼如下。
①游戲主體函數:
function initGame() {
gameStart = true;
setLocation();
creatQ();
moveObj();
}//end of function
initGame();//調用主體函數
②四個功能函數:
//設置“man”影片剪輯的初始位置與響應鼠標事件
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 = 1;
yourAns = Number(this._name.
substr(1));
checkResult(this);
}
};
}//end of for
}//end of function
//隨機生成任務
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 = 1;
delete moveObj;
this.onEnterFrame = 1;
delete this.onEnterFrame;
for (var i = 0; i<4; i++) {
this[\"a\"+i].onPress = 1;
}
}
}
//控制“man”影片剪輯的運動
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();
}
}
};
}
//判斷所選擇的答案正確與否,并進行計分操作
function checkResult(obj:MovieClip):Void {
if (answer == yourAns) {
yourScore += 10;
dt_score.text = yourScore;
obj.rOw.gotoAndStop(\"right\");
} else {
obj.rOw.gotoAndStop(\"wrong\");
}
}
至此,本游戲主體部分就制作完成了,其游戲特征還比較薄弱,情景性、競爭性還需進一步加強。用戶可以在此基礎上設置更加引人入勝的情境,加入競爭機制,增加其游戲性;也可以根據自己的需要,增加任務的數量,添加更多的知識內容,使學生通過游戲真正達到掌握知識的目的。