版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Flash游戲編程
肖剛閩江學院電子系計算機教研室Email:fuzhou3721@163第八章關卡設計教學提要游戲關卡模式(分類)關卡示例程序駕馭游戲中關卡設計的思路和技巧1引言人類似乎對戰(zhàn)勝困難充溢熱忱,當一個個難關被攻破時,玩家從中獲得了成長或者榮譽,一種過五關斬六將的傲慢感油然而生。任何游戲都有由易到難的內在跨度,將不同難度串連起來,既豐富了游戲的內涵,又擴大了游戲的目標玩家。所以設計關卡成了大多數(shù)游戲的選擇。那么原委什么是關卡?有何技術難點?如何具體實現(xiàn)呢?2.1關卡的分類關卡其實就是游戲中一個個串連的任務。從開發(fā)者的角度考慮,關卡可以分為以下兩類:簡潔參數(shù)化關卡變換場景的關卡2.2簡潔參數(shù)化關卡這種游戲的難度級別可以用簡潔的參數(shù)變更來表示。比如漢諾塔游戲,漢諾塔層數(shù)的遞增就構成了一級級的關卡。掃雷游戲,不同的寬度、高度、雷數(shù)的組合形成不同的難度級別。還有?設計這類游戲的關卡特殊簡潔,只要在初始化游戲中場景前,修改這些參數(shù)即可。依據(jù)新的參數(shù)構建的游戲場景自然就形成新的關卡了。更加干脆的說,這類游戲的關卡,只要在初始化游戲時運用一個自定義的selectMode函數(shù)即可解決。2.2簡潔參數(shù)化關卡下面的代碼是某掃雷游戲的selectMode函數(shù),它通過下拉框選擇預設難度級別。從下拉框中選擇一個難度,程序就將難度參數(shù)保存在三個文本框。以便用戶自定義修改以及初始化游戲之用。comboMode.addEventListener(Event.CHANGE,selectMode);functionselectMode(evt:Event){ switch(evt.target.value){ case"1": txtLineCount.text=String(8); txtRowCount.text=String(8); txtMineCount.text=String(10); break; case"2": txtLineCount.text=String(14); txtRowCount.text=String(14); txtMineCount.text=String(35); break; }}2.3變換場景的關卡這類游戲的關卡之間不是通過修改幾個參數(shù)就可以解決的,它可能完全換了一個場景。其中的變更可能有:地圖不同、敵人不同、任務不同等等。這種關卡在角色扮演游戲中比較多見。這種類型的關卡初看起來似乎比前者難多了。但事實上,假如開發(fā)者充分運用了面對對象的程序設計思想,將游戲中的各種組成部分模塊化,那么,搭建一個新的關卡,就象搭積木一樣簡潔。結合Flash優(yōu)秀的可視化設計,添加一個關卡甚至連一行代碼都不用添加。2.3變換場景的關卡關鍵是理清晰關卡之間的異同,并將差異規(guī)整成規(guī)范的模式。例如經典的搬運工游戲。其關卡之間的唯一差異是地圖不同。于是將地圖的格式規(guī)范化,那么只要導入新地圖的數(shù)據(jù)即可就進入下一關,這和參數(shù)化關卡已經特殊接近了。再比如設計類似仙劍奇?zhèn)b傳的游戲。經分析,關卡之間的差異無非是地圖不同、對話內容不同、任務不同、敵人不同、角色等級或裝備等的不同。那么只要將地圖表示、對話方式、任務模式、戰(zhàn)斗方式、角色屬性等等都規(guī)范化成一個固定的模式,由游戲基礎框架(或游戲引擎)供應支持,那么設計一個新的關卡,就簡化成繪制一張新地圖、編寫一份新對話文本、設定新成功條件、放置新角色位置、設置新角色屬性與行為等工作。假如設計得當,其中多數(shù)工作并不須要編寫代碼,除非要基于這些數(shù)據(jù)設計特殊的游戲邏輯。2.3變換場景的關卡總而言之,關卡類游戲可以歸結為游戲平臺設計、參數(shù)設計以及必需和兩者關聯(lián)的程序邏輯設計三個部分。如下圖所示:這里的參數(shù)是廣義的概念,各種角色、資源、對象都是一種參數(shù)中的一種。
3游戲實例:戰(zhàn)場生存過關版游戲描述:將前面設計的游戲“戰(zhàn)場生存記”改為帶關卡的游戲。每個關卡的大炮數(shù)量不同,有的關卡還有地雷或者障礙物。只要玩家能夠堅持住確定的時間即進入下一關。3.1主流程圖先設計這個游戲的主流程圖,如下圖所示:其中關卡數(shù)可以接著添加。具體設計時將此流程圖的每個過程對應為Flash中的一幀或者連續(xù)的幾幀,留意幀之間的跳轉應盡量運用幀標簽以適應開發(fā)時幀數(shù)的變更。3.2關卡的結構關卡是一段連續(xù)的幀,其程序結構如下圖所示:3.2關卡的結構關卡初始化階段:完成本關卡游戲場景的準備,布置大炮、地雷,以及初始化游戲場景。游戲階段:當游戲任務完成或者失敗,在退出關卡之前,那些以后不再運用到的資源、代碼,都要清除干凈,以免影響程序的其它部分。3.3具體步驟設計地雷角色地雷角色與炮彈角色特殊相像,但更簡潔,因為它不須要移動。這里僅給出其第1幀代碼,角色的其余部分讀者自行完成。stop();varenemy:MovieClip=MovieClip(parent.getChildByName("hero"));addEventListener(Event.ENTER_FRAME,repeat);functionrepeat(e:Event){ if(enemy==null){ return; } if(hitTestObject(enemy)){//遇到敵人了 gotoAndPlay("bomb");//自身爆炸 enemy.dead();//指示敵人死去 }}組織游戲程序這個游戲完成時的時間軸如下圖所示:第1幀是游戲起先界面以及各個具體的函數(shù)。接下來是四個關卡,最終兩幀分別是成功/失敗界面和全部過關界面。3.3具體步驟3.3具體步驟內容描述角色圖層放置著英雄角色實例(hero)、大炮和地雷等等。這些實例都是從庫中干脆拖出來,在可視化環(huán)境下布置好即可。與戰(zhàn)場生存記相比,程序多了幾個變量,它們分別是level(當前關卡)、totalLevel(關卡總數(shù))、totalTime(關卡時限)、victory(成功/失?。?。這些變量在初始化程序和推斷游戲流程時運用到。計時方式改為倒計時,推斷游戲成敗的方式亦有所不同。如何不同?第1幀的代碼,與前一個游戲不同的部分如下所示:varlevel:int=1;vartotalLevel=4;vartotalTime:int;varvictory:Boolean;functionstartGame(e:MouseEvent){ gotoAndPlay("level"+level);}3.3具體步驟functioninit(){ victory=false; time=totalTime; timeCountShow.text=String(time); levelShow.text=String(level); startTime=newDate(); hero.gotoAndStop("stop"); stage.addEventListener(KeyboardEvent.KEY_DOWN,heroRun);//跑動 stage.addEventListener(KeyboardEvent.KEY_UP,heroStop);//取消跑動 stage.addEventListener(Event.ENTER_FRAME,checkGame);//檢查游戲是否結束}functioncheckGame(e:Event){ showTime(); if(hero.status=="dead"){ play();//游戲失敗,播放到關卡結束幀 } if(time<=0){ hero.status="victory"; victory=true; play();//游戲成功,播放到關卡結束幀 }}functionshowTime(){ endTime=newDate(); time=int((endTime.getTime()-startTime.getTime())/1000); time=totalTime-time;//倒計時 timeCountShow.text=String(time);}關卡初始化由于關卡的大部分功能都由自動化的剪輯完成,所以這段代碼特殊少,例如第一關的初始化代碼為:totalTime=15;init();stop();即游戲關卡初始化后播放頭停止,進入游戲中狀態(tài)。3.3具體步驟垃圾清理工作——關卡結束幀關卡結束幀負責處理垃圾清理工作,這里僅清除三個事務處理函數(shù),其它垃圾的清理交給垃圾回收機制處理。這是取巧的方法,假如你的關卡結束后程序出現(xiàn)異樣,那么估計就是垃圾沒有清理完全的緣由。stage.removeEventListener(KeyboardEvent.KEY_DOWN,heroRun);stage.removeEventListener(KeyboardEvent.KEY_UP,heroStop);stage.removeEventListener(Event.ENTER_FRAME,checkGame);gotoAndStop(“result”);※其它幾個關卡的初始化和垃圾清理代碼與此類似不再贅述3.3具體步驟3.3具體步驟成功/失敗界面顯示過關成功或者失敗,并確定游戲的下一步走向。其代碼如下:stop();if(level>=totalLevel&&victory==true){ gotoAndStop("win");//成功畫面}else{ if(victory){ level++; txtResult.text="闖關成功"; }else{ txtResult.text="闖關失敗"; } bt_continue.addEventListener(MouseEvent.MOUSE_DOWN,startGame);}3.3具體步驟游戲結束界面較為簡潔,代碼如下:stop();level=1;bt_restart.addEventListener(MouseEvent.MOUSE_DOWN,startGame);它表示假如點擊重玩按鈕,游戲將重新從第一關起先玩。4測試程序測試游戲,直到達到預期的效果。下圖為這個游戲運行中的一個截圖:5本章小結關卡類游戲的結構為:游戲基礎框
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五金材料采購實踐分享
- 2022年四川省廣元市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2022年安徽省合肥市公開招聘警務輔助人員輔警筆試自考題2卷含答案
- 2022年四川省廣安市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2021年貴州省銅仁市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2025年工具鋼項目提案報告模范
- 廣西北海市(2024年-2025年小學六年級語文)統(tǒng)編版隨堂測試((上下)學期)試卷及答案
- 2025年出入口機項目立項申請報告模范
- 實習生的辭職報告
- 2024年服務器項目資金需求報告代可行性研究報告
- 手術室搶救工作制度
- ce自我聲明模板
- 鋼閘門監(jiān)理評估報告
- 高檔養(yǎng)老社區(qū)項目計劃書
- 京東物流信息系統(tǒng)
- 蛇年銷售年會發(fā)言稿范文
- 國管局住房制度改革相關政策解答
- 無縫鋼管服務方案
- 排澇泵站養(yǎng)護方案范本
- XX醫(yī)院臨床醫(yī)療質量考核通用記錄表
- 城市交通樞紐運營故障應急預案
評論
0/150
提交評論