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