一堂豐富的AS3遊戲程式設計課
主講老師:Flash遊戲開發大師Gary Rosenzweig
指定教材:《ActionScript 3.0遊戲程式設計(第2版)》
參考書:ActionScript 3.0 Game Programming University, Second Edition 及其他
學習時間:2010.09~2010.10
歷時一個月,我的AS3遊戲程式設計課終於結束了。應該說,過程比我想象的要順利一些。我喜歡遊戲,包括Flash遊戲,也曾學會一陣子Flash,但從來沒有研究過如何開發Flash遊戲。因此,上課前心情還是有些緊張的。好在,Rosenzweig不愧為箇中裡手,其講解由淺入深、層次清晰,連我這樣一個Flash菜鳥也能從中收穫頗豐。
本課程內容豐富,Rosenzweig一共講了25個完整的遊戲示例。這些遊戲類別多種多樣,包括記憶遊戲、射擊類遊戲、圖片拼圖、休閒遊戲、文字遊戲和動作類遊戲等。甚至,還有3D遊戲,Nothing is impossible,Rosenzweig就用了一整節課講解如何用Flash製作3D遊戲,道出了在2D環境營造3D效果的多種技巧。
不過,由於自身的水平及玩遊戲的經歷,我印象最深刻的還是同色消除遊戲(國內常稱為“對對碰”)。這款遊戲有兩大要點:一是查詢匹配,即在遊戲板上找到所有的匹配;二是尋找可能的移動,即尋找在進行交換後能連成3連的匹配。
為查詢匹配,需要用到兩個函式:getMatchHoriz和getMatchVert函式。getMatchHoriz函式有特定的執行步驟。傳入一行和一列,它會判斷下一個小塊是否與當前小塊型別匹配。如果匹配,就新增到一個陣列中。它會不停的在水平方向進行判斷,直到發現不匹配的小塊。這時,它就返回得到的陣列。如果當前小塊與下一個小塊就不匹配,這個陣列就只有一個元素,就是當前小塊。如果它們匹配,而再下一個小塊也與它們型別相同,那麼這個陣列就會包含3個小塊:
// 從當前點開始尋找水平方向的匹配
public function getMatchHoriz(col,row):Array {
var match:Array = new Array(grid[col][row]);
for(var i:int=1;col+i<8;i++) {
if (grid[col][row].type == grid[col+i][row].type) {
match.push(grid[col+i][row]);
} else {
return match;
}
}
return match;
}
getMatchVert函式幾乎與getMatchHoriz函式相同,只是它沿著列進行匹配搜尋。
而為尋找可能的移動,需要考慮兩種模式:2+1和中間。2+1模式是指兩個相同小塊相連,要在它們的某一端找一個相同的小塊。中間模式是指兩個小塊相間一個,要在它們中間小塊的兩邊找一個相同的小塊。這兩種模式都是垂直和水平兩種情況。以下是尋找可能的匹配的lookForPossibles函式:
// 檢視遊戲板上是否有可能的匹配
public function lookForPossibles() {
for(var col:int=0;col<8;col++) {
for(var row:int=0;row<8;row++) {
// 水平方向上,2+1模式
if (matchPattern(col, row,
[[1,0]], [[-2,0],[-1,-1],[-1,1],[2,-1],[2,1],[3,0]])) {
return true;
// 水平方向上,中間空缺
if (matchPattern(col, row, [[2,0]], [[1,-1],[1,1]])) {
return true;
// 垂直方向上,2+1模式
if (matchPattern(col, row,
[[0,1]], [[0,-2],[-1,-1],[1,-1],[-1,2],[1,2],[0,3]])) {
return true;
// 垂直方向上,中間空缺
if (matchPattern(col, row, [[0,2]], [[-1,1],[1,1]])) {
return true;
}
}
}
// 沒有發現可能的移動
return false;
}
一千個讀者就有一千個哈姆萊特,同樣,不同水平的學習者對本課程也會有不同層次的理解。期待您和大家一起分享自己的收穫與體會。
(本文作者為本書執行編輯,所謂學習過程也是編輯過程。)
相關文章
- 程式設計師豐富個人生活程式設計師
- POCO庫中文程式設計參考指南(8)豐富的Socket程式設計程式設計
- TCP/IP通訊程式設計的豐富多樣性(轉)TCP程式設計
- 經驗豐富的程式設計師,不要和新手說這些程式設計師
- AS3 程式設計師的技能樹S3程式設計師
- 豐富的設計技能勝過特定於平臺的知識
- 作為一名程式設計師 需要不斷豐富自己的知識庫程式設計師
- 課時34:豐富的else語句以及簡潔的with語句
- 程式設計師的數學一書評:通俗易懂,觸類旁通,內容豐富程式設計師
- 關卡豐富,引導剋制?如何看待《艾爾登法環》中的這些獨特的遊戲設計?遊戲設計
- 大齡程式設計師經驗那麼豐富,為什麼很多公司都不招?程式設計師
- 利用JavaFX功能豐富Swing應用程式Java
- 品牌|切割+鏤空 分享一組效果豐富的品牌視覺設計作品視覺
- MongoDB學習之豐富的索引MongoDB索引
- 急需經驗豐富的java高手Java
- 一堂以“做遊戲”為考核標準的新聞專業課遊戲
- 一個資源豐富的線上小程式社群推薦
- Win10系統流暢設計新變化曝光:豐富的動畫效果Win10動畫
- 【遊戲設計隨筆10】解密遊戲設計的30堂課遊戲設計解密
- 一堂如何提高程式碼質量的培訓課(三)
- 玩遊戲學程式設計:Code.org推出Flappy Bird程式設計課遊戲程式設計APP
- 【cypress】4. 豐富的除錯工具除錯
- 10個豐富自我的機器學習專案機器學習
- 豐富的包(packages)生態系統Package
- 工作豐富化的步驟(轉載)
- 計算的豐富度可以用最小二乘法
- 上好一堂資訊科技融合教學的課
- 打破“過度簡化”:在豐富世界中重新解讀遊戲遊戲
- Coursera公開課:C#遊戲程式設計入門遊戲程式設計
- 程式設計師週刊(第4期):程式設計師的財富觀程式設計師
- 教授何愷明在MIT的第一堂課MIT
- 網易遊戲Q3穩健增長,新品儲備多元豐富遊戲
- 使用JSPWiki豐富Unity-UPM包的使用JSUnity
- 十個擁有豐富UI元件的JavaScript框架UI元件JavaScript框架
- 風變程式設計——小白也能學會的程式設計課!程式設計
- AntDB資料庫線上培訓開課啦!更靈活、更專業、更豐富資料庫
- 旅行保險公司工作豐富模型(轉載)模型
- 使用 LogProperties source generator 豐富日誌