楊 寧
(湖南科技學院 電子與信息工程學院,湖南 永州 425199)
賽車距今已有超過100年的歷史。最早的賽車比賽是在城市間的公路上進行的。由于公路賽道的危險性比較大,所以專業(yè)比賽的賽道應運而生。第一場賽車比賽于1887年在巴黎舉行。后來,賽車運動分為了場地賽車和非場地賽車。賽車類游戲是一種非常棒的游戲,吸引著很大一部分玩家。
城市間的飆車雖然不被官方認可,但是還是有許多年輕人喜歡這項刺激的運動。鄉(xiāng)村飆車游戲就是以鄉(xiāng)村為競技場景的飆車游戲,在游戲中玩家可以駕駛著汽車在鄉(xiāng)間公路上盡情地飆車。
當然途中會有一些障礙物,如果是本分的駕駛員,那就繞行。如果已經(jīng)厭煩了生活中本本分分的開車習慣,玩家完全可以將障礙物視為無物,直接將其撞飛。不過游戲歸游戲,生活中還是要本本分分地駕駛。
雖然本游戲是一款競技類游戲,但操作并不是很難。游戲中玩家可以用鍵盤的上、下、左、右鍵控制賽車的行駛方向,鍵盤的Q鍵能切換視角,M鍵能打開或者收起小地圖,玩家可以根據(jù)自己的喜好用S鍵控制汽車儀表盤是否顯示。如果手機沒有鍵盤,筆者從方便玩家的角度充分考慮了游戲的可玩性。
玩家可以選擇傳感器操控,這時候屏幕上的上、下按鍵控制汽車的前進、后退,通過手機的左、右按鍵控制汽車左轉、右轉,屏幕上的圖標Q用來切換視角,圖標M用來打開或者收起小地圖,圖標S控制汽車儀表盤是否顯示。
隨著網(wǎng)絡的不斷發(fā)展,越來越多的玩家開始喜歡競技游戲,此類游戲可以單機對戰(zhàn),可以聯(lián)網(wǎng)對戰(zhàn),競爭激烈、酷炫多彩。“鄉(xiāng)村飆車”作為一款競技類賽車游戲,很好地再現(xiàn)了賽車類游戲的精彩。有了這款游戲,只要帶著手機,玩家便可以隨時隨地進行虛擬的飆車競技,享受挑戰(zhàn)極限及刷新記錄帶來的游戲快感,滿足玩家對游戲娛樂性的要求。
游戲的準備工作通常是根據(jù)游戲的策劃來制作游戲所用的圖片、聲音等。本游戲主要的圖片包括:廣告牌、交通指示牌、小地圖、菜單、山地、路邊、交通信號燈、水面、天空等。本游戲主要的聲音包括:剎車、獲得物品、汽車加速、發(fā)車倒數(shù)、碰撞聲等。
該游戲為競技類3D賽車游戲,對于技術的運用很多。
樹木繪制的排序技術,根據(jù)樹木與攝像機的距離,先繪制離攝像機越遠的樹木,這樣可以避免樹木渲染時出現(xiàn)的遮擋問題。
可碰撞物體碰撞效果技術,可碰撞物體分為兩種:一種可以分為擁有靜止狀態(tài)和飛行狀態(tài)的碰撞物,如交通錐等,使用線程監(jiān)控其當前狀態(tài),當被賽車碰撞時,可碰撞物體由靜止狀態(tài)變?yōu)轱w行狀態(tài),實現(xiàn)碰撞效果;另一種為可控制賽車的上下限速度,如加減速彈簧,被賽車碰到時或增加速度上限或減少速度上限,然后消失。
傳感器技術,通過Android系統(tǒng)中姿態(tài)傳感器的應用,將手機當前yaw,pitch,row軸的方向映射到3D場景中,以實現(xiàn)對汽車的方向控制。幾何圖形OpenGL ES實現(xiàn)技術。該技術實現(xiàn)了球、圓環(huán)、圓錐等基本部件的構造,以及部件之間的組裝,比如場景中的飛艇、農(nóng)舍、樓房、隧道、交通指示牌等部件。天空穹技術,實現(xiàn)了游戲中的天空和遠山場景。水面波動技術,運用三角函數(shù)換幀實現(xiàn)水面的波動效果,增加游戲場景的真實性。
儀表板技術,通過恢復矩陣使速度表、虛擬按鈕、迷你地圖等部件固定于手機屏幕,并對其進行視角綁定。游戲時間同步記錄技術,通過對手機系統(tǒng)時間的記錄,根據(jù)記錄時間的差值在手機屏幕上顯示游戲所用的時間。地圖拼接技術,該技術實現(xiàn)了迷你地圖及賽道的生成,其中迷你地圖顯示了整幅地圖的路線,以及賽車在地圖中的位置。
3Ds Max生成物體加載技術,本游戲中的汽車是用3Ds Max設計的,其在游戲場景中的渲染是通過加載技術實現(xiàn)的,該技術可以根據(jù)3Ds Max生成物體的obj文件自動在OpenGL ES中加載,并自動計算頂點的平均法向量。2D界面的觸控技術,重寫觸控方法,在設定的觸控區(qū)域實現(xiàn)不同的觸控效果。Mipmap技術,實現(xiàn)紋理貼圖的重復填充,大大節(jié)省內存,山地、大樓等的繪制均使用了該技術。多鍵監(jiān)聽技術,首先將方向鍵規(guī)定為16進制數(shù)l,2,4,8,通過位移計算實現(xiàn)該技術。該技術實現(xiàn)了賽車行駛方向和行駛速度的控制。
聲音實現(xiàn)技術,通過MediaPlayer和SoundPool實現(xiàn)游戲中背景音樂和音效,背景音樂重復播放,音樂池中音效分為按向下鍵時的剎車聲音,按向上鍵時的加速聲音,賽車碰撞的聲音,賽車減油的聲音。混合的實現(xiàn),通過改變目標因子和源因子的值,設定不同的混合,其中水面、樹的繪制運用到了混合技術。光照技術,在繪制賽車時開啟光照,賽車的顏色是由光照實現(xiàn)的。多點觸控技術,虛擬按鍵可以同時觸控,互不影響,各自產(chǎn)生其設定效果。
(1)游戲開始后,首先進入Activity_GL_Racing.java類,該類為應用程序運行的開始。在該類中將對一些量進行初始化。如聲音的初始化、傳感器的應用初始化等。
(2)在Activity_GL Racing.java類中執(zhí)行了跳轉語句后,游戲進入游戲開始界面。
(3)游戲開始界面結束后,游戲進入聲音選擇界面,當玩家選擇了開啟或者關閉后,將游戲聲音狀態(tài)設置為玩家選擇的狀態(tài)并發(fā)送消息到Activity_GL_Racing.java類中的消息處理器,請求切換界面,游戲進入主菜單界面。
(4)在主菜單界面中,單擊不同的菜單項,將向Activity_GL_ Racing.java類中的消息管理器發(fā)送不同的消息,進入相應的界面。如單擊幫助菜單,則向消息管理器發(fā)送跳轉到幫助菜單界面的消息,進入幫助界面。
(5)當單擊競技模式菜單項時,先向Activity_GL Racing.java類中的消息管理器發(fā)送消息,跳轉到游戲選擇界面,在該界面中,可以選擇進入游戲或者查看玩家記錄。通過選擇,將向Activity_GL Racing.java類中的消息管理器發(fā)送消息,并跳轉到對應的界面中。
(6)當玩家選擇的是進入歷史記錄界面,將向Activity_GL_Racing.java類中的消息管理器發(fā)送消息,跳轉到該界面,在該界面中,可以通過屏幕觸控事件來查看玩家歷史記錄。
(7)當玩家選擇的是進入游戲,將向Activity_GL Racing.java類中的消息管理器發(fā)送消息,跳轉到游戲加載界面,在該界面中將調用初始化游戲部件的方法,進行游戲的加載。
(8)游戲加載成功后,進入游戲界面。在游戲中,首先調用ThreadCamera.java類,進行場景瀏覽,結束后開啟聲音播放并調用DrawCountdown.java類對象,進行游戲前倒計時,在倒計時結束之前,游戲不可控,在游戲倒計時結束后,游戲恢復為可控制狀態(tài)。
汽車與公路部件的碰撞檢測較為復雜,總共分為兩個階段。第1個階段是粗測階段,主要檢測汽車是否位于當前檢測的地圖單元中,如果沒有位于該地圖單元中,則停止檢測;如果位于該地圖單元中,則進行第2階段的碰撞檢測。第2階段是細測階段,檢測汽車與當前地圖單元中公路護欄的具體碰撞。
在賽車游戲中,對汽車行駛圈數(shù)的判定至關重要。只有正確合理的計圈方法才能確保游戲的公平性、真實性和可玩性。下面闡述在本游戲中計圈的判定規(guī)則。
(1)行駛夠了半圈;(2)行駛到終點時行駛方向是駛向終點;(3)若出現(xiàn)不符合上述兩點的行駛情況,半圈標志清零;(4)圈數(shù)加1后,半圈標志清零。
在游戲中還存在可碰撞部件,包括加減速彈簧、路障牌和交通錐筒等。具體在實現(xiàn)時要注意碰撞物體的控制方法及其可碰撞物體動畫實現(xiàn)線程。
每完成一次任務,或者結束一次挑戰(zhàn)為游戲添加相應的獎勵,如金錢獎勵制度、榮譽制度等,玩家可以根據(jù)自己持有的金錢和榮譽度購買更高級的賽車,挑戰(zhàn)更高級的對手。當然,為了展現(xiàn)游戲的真實度,可以給玩家指定犯罪值,當玩家破壞一定量的公共設施或者對警方挑釁的時候,生成相應的警車對玩家進行追趕逮捕。相應地進行上述優(yōu)化后,游戲的可玩度會得到更進一步的提高。
在現(xiàn)實的賽車比賽中,賽道上不僅僅只有一輛賽車,如果沒有控制好賽車,可能發(fā)生撞車事件。在游戲中同樣可以模擬該類事件,賽車數(shù)量增加后可以大大增加游戲的難度和可玩性,吸引更多的玩家。
賽車行進過程中碰到路邊時不直接停下,而是將速度由標量變?yōu)橄蛄?,并實現(xiàn)碰撞、擦火的效果,以增加游戲的可玩性。
可以增設地形種類,地形可以是有起伏的賽道,增加賽道難度,游戲的可玩性也能大大提高。
[參考文獻]
[1]吳亞峰.Android 3D游戲開發(fā)技術詳解與典型案例[M].北京:電子工業(yè)出版社,2012.
[2]涂正宏,李瑜慶.基于Android系統(tǒng)的射擊游戲APP開發(fā)與設計[J].電子世界,2018(1):20-22.
[3]陳漫雪,薛雪.基于Android新版“吃豆人”游戲的設計與實現(xiàn)[J].計算機應用與軟件,2017(6):106-112.