曾翔宇
(湖南科技學(xué)院 電子與信息工程學(xué)院,湖南 永州 425199)
動(dòng)作類游戲是最傳統(tǒng)的游戲類型之一,主要由玩家所控制的人物或角色根據(jù)周圍環(huán)境的變化,利用鍵盤或者手柄、鼠標(biāo)的按鍵作出一定的動(dòng)作,如移動(dòng)、跳躍、攻擊、躲避、防守等,來達(dá)到游戲要求的相應(yīng)目標(biāo),一般是為了過關(guān)。TV GAME早期的作品多數(shù)集中在這個(gè)類型上。
通過了幾代游戲機(jī)種的變化和發(fā)展,現(xiàn)在的動(dòng)作類游戲中已經(jīng)融入了更新鮮的元素、更完整的劇情、更復(fù)雜的機(jī)關(guān)解謎,這些都使動(dòng)作類游戲逐漸成為所有類型游戲里面款式最豐富的一種。代表作品:《波斯王子》《鬼泣》系列、《超級(jí)忍者》系列(是SEGA經(jīng)典系列正宗ACT代表),還有《超級(jí)瑪麗》《刺客信條》《真三國(guó)無雙》等。
本文通過設(shè)計(jì)并實(shí)現(xiàn)在Android平臺(tái)上的空戰(zhàn)游戲《3D空戰(zhàn)》,闡述了此類游戲的開發(fā)過程及實(shí)用的開發(fā)技巧。
《3D空戰(zhàn)》是一款很好玩的3D飛行射擊游戲,在游戲中你要控制一架模擬戰(zhàn)機(jī),完成不同的任務(wù)。全3D的畫面,游戲場(chǎng)景的設(shè)計(jì)別具一格,雖然畫面是全3D打造,不過運(yùn)行非常流暢,在Symbian系列手機(jī)系統(tǒng)中廣為流行。游戲的玩法和同類3D飛行游戲類似,上下左右鍵控制飛機(jī)運(yùn)動(dòng),確定鍵進(jìn)行射擊,游戲的目標(biāo)就是完成每關(guān)的任務(wù),也就是擊落一定數(shù)量的敵機(jī)。不過敵機(jī)也可以射擊,你要做的是控制好自己的戰(zhàn)機(jī),盡量和對(duì)面呼嘯而來的敵機(jī)導(dǎo)彈保持距離。該游戲最大的特點(diǎn)就是巧妙而又豐富的場(chǎng)景設(shè)計(jì)—天空球和陸地球,這也是3D游戲吸引人的特點(diǎn)之一[1]。同時(shí)也是非常有挑戰(zhàn)性的游戲,面對(duì)不斷飛馳而來的炮彈,你要操作你的戰(zhàn)機(jī),努力躲避空中的炮彈,同時(shí)發(fā)射導(dǎo)彈擊落敵機(jī),當(dāng)擊落的敵機(jī)數(shù)大到一定數(shù)量時(shí),就可以成功過關(guān)了。
《3D空戰(zhàn)》游戲的規(guī)則很簡(jiǎn)單,玩家駕駛著自己的飛機(jī)向前飛行,在飛行的過程中,會(huì)從不同方向飛出向玩家發(fā)射炮彈的敵機(jī),玩家可以按下手機(jī)上的確認(rèn)鍵發(fā)射炮彈擊落敵機(jī),也可以通過上下左右鍵控制飛機(jī)躲避,當(dāng)擊落的敵機(jī)數(shù)到一定數(shù)量時(shí),玩家就闖關(guān)成功,進(jìn)行下一次挑戰(zhàn)。下面具體進(jìn)行闡述。
(1)啟動(dòng)游戲后首先進(jìn)入的便是游戲聲音設(shè)置界面。單擊“是”,則開啟游戲聲音,單擊“否”,則關(guān)閉游戲聲音。
(2)聲音設(shè)置完畢后,返回主界面。該界面共有5個(gè)菜單,分別是關(guān)于游戲、游戲設(shè)置、快速游戲、游戲幫助及退出游戲。
(3)在開始菜單界面若單擊“游戲設(shè)置”,則進(jìn)入游戲聲音設(shè)置界面。可進(jìn)行聲音設(shè)置。
(4)游戲主界面若單擊“關(guān)于游戲”,則進(jìn)入游戲關(guān)于界面。該界面介紹了關(guān)于本游戲的相關(guān)信息。
(5)游戲主界面若單擊“游戲幫助”。該界面顯示了游戲的操作規(guī)則和操作方法。
(6)在開始菜單界面若單擊“快速游戲”,則首先切換到游戲加載畫面,然后開始游戲。開始菜單界面若單擊“退出游戲”,則會(huì)自動(dòng)結(jié)束游戲,返回手機(jī)桌面,若要重新運(yùn)行,在應(yīng)用程序中單擊小飛機(jī)圖標(biāo),就可以重新開始游戲。
(7)游戲開始的畫面:在一開始,自己的飛機(jī)在屏幕中間位置,敵機(jī)則由遠(yuǎn)及近從不同角度對(duì)我機(jī)射擊。屏幕的左上角顯示的是我機(jī)的數(shù)量,當(dāng)被敵機(jī)擊中之后,其數(shù)量會(huì)相應(yīng)減少,替換我機(jī)繼續(xù)進(jìn)行游戲,當(dāng)我機(jī)全被敵機(jī)擊中后,則表示游戲失敗。屏幕右上角是擊落的敵機(jī)數(shù)量,當(dāng)擊落10架敵機(jī),則闖關(guān)成功。
(8)游戲進(jìn)行中:敵機(jī)從上到下,由遠(yuǎn)到近對(duì)我機(jī)進(jìn)行射擊。
(9)戰(zhàn)機(jī)被敵機(jī)擊中,并發(fā)生爆炸時(shí)的場(chǎng)景。
(10)當(dāng)玩家完成規(guī)定的任務(wù)時(shí),則游戲勝利,進(jìn)入游戲勝利界面。玩家飛機(jī)全被擊落之后,則游戲結(jié)束,進(jìn)入失敗界面。
人們自古以來就對(duì)浩瀚的太空充滿好奇,同時(shí)也不斷地探索著這塊未知的領(lǐng)域,正是由于這樣,出現(xiàn)了許多以太空為中心題材的游戲,比如《太空保衛(wèi)戰(zhàn)》等一些游戲。《3D空戰(zhàn)》也是這種3D動(dòng)作飛行射擊游戲,玩家控制自己的戰(zhàn)機(jī)遨游天空,需要玩家注意力集中,當(dāng)玩家投入到游戲中后,就可以體會(huì)到穿越高山、海洋、在空中邀游的完美體驗(yàn)。開發(fā)這款游戲的目的是在Android平臺(tái)上的游戲開發(fā)提供一個(gè)指導(dǎo)方案,而不是生產(chǎn)商業(yè)化的游戲產(chǎn)品。
游戲的準(zhǔn)備工作通常是根據(jù)游戲的策劃來制作游戲所用的圖片、聲音等。由于圖片的加載在游戲中比較耗時(shí),建議把一些小的圖片紋理,如飛機(jī)的機(jī)翼紋理、機(jī)身紋理、螺旋槳紋理等集成到一張圖片上,以縮短游戲加載時(shí)間,提高運(yùn)行速度。對(duì)于紋理的大小,不應(yīng)太大,適當(dāng)大小即可,這樣可以節(jié)省內(nèi)存資源。另外,還有準(zhǔn)備好游戲中用到的聲音文件。如炮彈發(fā)射聲音、敵機(jī)發(fā)炮聲音、爆炸音效、背景音樂等[2]。
程序中開始菜單、聲音設(shè)置界面、關(guān)于界面、幫助界面、加載界面及勝利界面均以2D實(shí)現(xiàn)。以上界面均直接自定義SurfaceView并重寫了其中的onDraw()方法,所有的按鈕均是作者用貼圖實(shí)現(xiàn)的,避免了使用Android自帶控件,使游戲畫面更加絢麗、個(gè)性。
游戲時(shí)的界面使用3D技術(shù)實(shí)現(xiàn),游戲界面直接自定義了GLSurfaceView并實(shí)現(xiàn)了Renderer接口,通過重寫onKeyDown()方法、onTouchEvent()方法實(shí)現(xiàn)與用戶的交互。本游戲使用了簡(jiǎn)單的碰撞檢測(cè)算法。實(shí)際商業(yè)化游戲開發(fā)中,往往使用的碰撞檢測(cè)算法是更有效率、更準(zhǔn)確、更成熟的算法。而這些算法往往都是由數(shù)學(xué)家來研究的。
接下來將通過游戲的運(yùn)行過程闡述各個(gè)類在游戲中的作用,游戲的運(yùn)行步驟如下。
(1)啟動(dòng)游戲后,首先在G L D e m o中初始化StartSurfaceView,然后將用戶界面切換到聲音設(shè)置界面。
(2)設(shè)置完游戲聲音后,StartSurfaceView將調(diào)用其中的setMenuView方法,將界面切換到主菜單界面。
(3)在主菜單界面StartSurfaceView中,根據(jù)不同的菜單項(xiàng)調(diào)用不同的方法,進(jìn)入不同界面。如果單擊關(guān)于,則調(diào)用setAboutView方法,進(jìn)入關(guān)于界面。
(4)當(dāng)主界面調(diào)用setMySurfaceView后,進(jìn)入游戲界面,首先MySurfaceView會(huì)初始化背景類、地板類、建筑塊類、鋼絲繩類等場(chǎng)景類來繪制場(chǎng)景。同時(shí)將啟動(dòng)線程ActionThread來刷新界面,同時(shí)進(jìn)行動(dòng)畫的繪制和碰撞檢測(cè)。
(5)游戲界面類中有一個(gè)消息處理器,MySurfaceView中有一個(gè)線程時(shí)時(shí)刻刻檢測(cè)是否勝利,如果勝利就發(fā)送消息,然后交給消息處理器處理,GL Demo調(diào)用setWinView方法,切換到勝利界面。
(6)在勝利界面,觸摸屏幕任意處,則GL- Demo調(diào)用setMenuView方法,切換到開始菜單界面[3]。
下面闡述游戲中控制物體運(yùn)動(dòng)的線程和碰撞檢測(cè)的實(shí)現(xiàn),以及用戶的交互,這些類中控制hero機(jī)和敵機(jī)的飛行,hero機(jī)炮彈和敵機(jī)炮彈的飛行,以及各種碰撞檢測(cè)。
(1)飛機(jī)是如何按路線飛行的,主要包括飛機(jī)路線設(shè)計(jì)器和游戲中的MoveThread線程。飛機(jī)的每條路線由4個(gè)點(diǎn)構(gòu)成,第1個(gè)點(diǎn)和第4個(gè)點(diǎn)在屏幕外,第2個(gè)點(diǎn)和第3個(gè)點(diǎn)在屏幕內(nèi),讓飛機(jī)沿著這條路線飛行,就能保證飛機(jī)從屏幕外面飛進(jìn)來,最后又飛出屏幕的效果。
由此可以用一個(gè)程序來生成多條不同的飛機(jī)路線,在游戲中讓這多條不同路線循環(huán)出現(xiàn),這樣既能保證路線的多樣化,又能節(jié)省資源,使游戲具有可玩性。
(2)飛機(jī)發(fā)射炮彈后,炮彈被添加進(jìn)炮彈列表,炮彈列表里面所有的炮彈在單獨(dú)線程中按既定的路線飛行,并且需要處理碰撞檢測(cè)和生命周期檢測(cè)。
—款多關(guān)游戲,總是能激發(fā)玩家的挑戰(zhàn)心理,對(duì)玩家有更大的吸引力。在玩家眼中,離開了闖關(guān)的刺激,游戲的體驗(yàn)就會(huì)大打折扣,所以增加游戲關(guān)數(shù)是游戲開發(fā)中必不可少的。本游戲中,并沒有設(shè)置游戲關(guān)數(shù),在以后的研究中可以改進(jìn)程序,增加游戲關(guān)數(shù),每闖一關(guān),游戲難度越大,以提升玩家的體驗(yàn)。
游戲應(yīng)該開發(fā)成多種模式,不同的模式帶來不一樣的體驗(yàn),單一模式會(huì)讓游戲很快失去對(duì)玩家的吸引力。同時(shí)應(yīng)該增加游戲難度的選擇功能,使玩家根據(jù)自己的情況選擇不同的等級(jí)進(jìn)行游戲,這樣才更加合理。
如果能在游戲過程中通過撿裝備改變子彈種類或者數(shù)量,比如hero機(jī)吃到了一個(gè)晶體之類的東西就可以讓炮彈數(shù)量更多或更快,會(huì)大大提高玩家對(duì)本游戲的體驗(yàn),在以后的研究中可以自行開發(fā)完成此功能。
[參考文獻(xiàn)]
[1]吳亞峰.Android3D游戲開發(fā)技術(shù)詳解與典型案例[M].北京:電子工業(yè)出版社,2012.
[2]夏有新.Android3D游戲模型紋理處理[J].硅谷,2013(11):103-104.
[3]林深華,范志尚,蔣建兵,等.基于Android平臺(tái)Unity3D游戲設(shè)計(jì)與實(shí)現(xiàn)[J].企業(yè)科技與發(fā)展,2013(10):40-42.