999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于libGDX的Android賽車游戲的設計與實現

2015-01-17 05:46:04張艷青
電子設計工程 2015年1期
關鍵詞:頁面游戲用戶

張 曉, 張艷青, 蘇 航

(1.華南理工大學 計算機科學與工程學院,廣東 廣州 510006;2.華南理工大學 軟件學院,廣東 廣州 510006)

隨著科技的發展,智能手機已經與我們的日常生活密不可分,當前主流的智能終端操作系統有 Android,IOS和Windows Phone等,其中Android是Google公司推出的開源手機操作系統[1]。2012年11月數據顯示,Android占據全球智能手機操作系統市場76%的份額,中國市場占有率為90%。越來越多的人喜歡在閑暇時間玩手機游戲,中國手機游戲市場在近幾年也一直保持了較快的發展[2]。優良的手機游戲不僅能給人們的生活帶來樂趣,也能給開發者帶來可觀的經濟收益。游戲引擎是游戲的核心,選擇一款兼容性好、高效、容易使用的游戲引擎,能大大降低游戲開發的成本。libGDX游戲開發框架就是這樣一款備受開發者青睞的引擎。本文將介紹利用libGDX來快速的開發一款簡單、有趣的Android賽車游戲。

1 libGDX介紹

libGDX基于 Apache License,Version 2.0協議,由 Java/C/C++語言編寫而成,是一個免費并且高效的跨平臺的2D/3D的 游 戲 開 發 框 架 , 它 由 audio、files、graphics、math、physics、scenes、utils這些主要類庫所組成,分別對應了libGDX中的音頻操作,文件讀取,2D/3D渲染,libGDX繪圖相關運算,Box2D封裝,2D/3D游戲組件,以及libGDX內置工具類,它們之間的關系如圖1所示。它使用JNI封裝了物理引擎Box2D的C++版本,使得其運行效率比其他同級的物理引擎要更快[3]。

圖1 libGDX框架架構Fig.1 Framework architecture of libGDX

一般在Android開發中,一個頁面是一個Activity,一個應用中包含多個Activity。而在基于libGDX的Android應用中,只有一個Activity,而且是用一個繼承了Activity的Android Application來作為整個程序的父類。libGDX中把Screen當成頁面,通過Game的setScreen方法來實現不同頁面的切換。每個Screen又可包含多個Stage對象,同一個Screen中多個Stage的切換也可以達到頁面切換的效果。 而頁面中的物體稱為 Actor,在 Screen 的 show()方法中,調用 Stage.Add(Actor actor)方法將物體添加到Stage中,這樣就構成一個游戲頁面。在Screen的render()方法中,可以不斷的更新各個Actor的狀態,從而達到游戲運行時動態變化的效果。

2 系統方案設計

賽車游戲的主要邏輯位于游戲主頁面中,在手機屏幕下方擺放一輛賽車,讓用戶通過手機的重力加速度感應器來控制左右移動,讓其他的賽車和背景賽道地圖像下滾動,可以給人一種相對的向前運動的感覺。用戶控制賽車向前行駛,會和屏幕上的其他Actor發生碰撞,所以必須要有碰撞檢測。

根據賽車游戲的特點,通過加載資源,進入游戲主菜單頁面,然后點擊“開始游戲”即可進入游戲主界面開始游戲了。當游戲結束時會進入成績排行榜頁面,顯示歷史成績,在排行榜頁面也可以返回到游戲主菜單或者直接重新開始游戲。游戲的設計流程圖如圖2所示。

圖2 賽車游戲流程圖Fig.2 Flow chart the racing game

3 系統實現

3.1 地圖滾動

要實現賽道地圖滾動的效果,一種比較簡單的方案是用兩張關于賽道的圖片放在一起,在屏幕中向下移動,一張圖片移出屏幕造成的空余由另一張圖片移進屏幕來填補,不斷循環,這樣可以達到賽道滾動的效果,如圖3所示。libGDX中Actor的setY方法可以直接設置圖片的Y軸坐標,從而讓圖片不斷的移進、移出屏幕。

3.2 元素添加與移動

游戲主頁面中賽道上面包含的可移動的元素有賽車和道具等。這些元素都是作為Actor對象來添加到頁面的Stage中的。

賽車分為兩類,一類是用戶直接控制的賽車,取名為playerCar,另一類是由系統自動控制的賽車,取名為friendCar。playerCar位于屏幕中Y軸方向上的固定位置,通過重力加速傳感器來控制playerCar的左右移動。friendCar由系統控制運行,多輛friendCar不斷的放在屏幕上(賽道圖的頂端),并設置向下運行的速度。因此,playerCar在垂直方向上絕對位置不變,而多輛friendCar向下方移動,讓用戶感覺playerCar是在向前行駛。

圖3 地圖循環滾動過程Fig.3 Map cycle rolling process

為了提高程序運行的效率,可以用對象池來管理friendCar。即在程序初始化的時候,實例化多個friendCar對象,放到一個集合中構成對象池,當需要添加賽車到屏幕上的時候,從對象池中取出一個friendCar,按照需要修改相應屬性,然后將它放到屏幕中上運行[4]。當這個friendCar要從屏幕上消失(被炸毀或者超出屏幕)的時候,可直接將這個對象放回到對象池中,如圖4所示。

圖4 利用對象池來管理賽車流程圖Fig.4 Flow chart of using object pool to manage the car

賽車對象池就是賽車對象的一個集合,libGDX中可以使用Group對象來表示這樣的一個集合,通過Group對象的getChildren()方法來得到該集合中的所有元素。

程序中可以添加一些道具,比如炸彈道具,playerCar得到這個道具之后,可以發射出炸彈,可以炸毀與之有接觸的friendCar。道具的添加和移動可以基本按照賽車添加和移動的方式來實現。

3.3 碰撞檢測

用戶控制賽車向前行駛,會和friendCar以及道具產生碰撞。playerCar與friendCar之間的碰撞檢測可以采用libGDX中已經封裝好的Box2D物理引擎,Box2D可以很方便的檢測到碰撞,并根據設置剛體的各種屬性,讓碰撞的效果更加逼真。

而playerCar與道具的碰撞則不必采用Box2D,可以直接把賽車和道具看成兩個矩形,從而只需檢測兩個矩形是否有接觸[5],libGDX 中 Actor的 getX()和 getY()方法可以得到該Actor的所處位置,getWidth()和getHeight()可以得到該Actor的寬度和高度,這樣就能很容易的檢測兩個Actor代表的矩形是否相交,如果這兩個矩形有相交,則表示有碰撞。

3.4 成績排名

用戶每玩一次游戲,都會根據游戲中相應的數據計算出一個得分作為本次游戲的成績。Android系統集成了SQLite,它是一款非常流行的嵌入式數據庫,支持SQL查詢,并且只占用很少的內存[6]。可以用本地數據庫SQLite將成績保存起來,讓用戶能夠查看歷史成績,但是如果保存每次游戲的成績,那將勢必會使應用占據越來越多的手機存儲空間。從手機空間和用戶體驗的角度來看,可以只存前十名的成績。如果用戶成績數據表中已經存了十條記錄,那么下一條前十的成績可以直接用來更新原來的第十名的成績。

3.5 屏幕適配

Android手機種類繁多,對應的手機屏幕的尺寸也是大小不一。賽車游戲的UI需要盡量照顧到各種尺寸的手機屏幕。我們可以取當前比較普遍的手機屏幕分辨率800*480為基準,用本手機的高度除以800得到BX,用本手機的寬度除以480得到BY,將BX,BY作為一個基礎的比例,程序中布局時,設置圖片位置時,用相應的寬度和高度來分別乘以BX和BY,再進行設置,可以達到很好的屏幕適配效果。

3.6 動畫與聲音

libGDX中提供了Animation類,可以用來實現動畫效果,其實質就是連續播放多張圖片。libGDX中用Sound來播放比較短暫的聲音如爆炸聲音,用Music來播放長時間的聲音比如背景音樂,通過Sound和Music可以很方便的播放游戲中需要的聲音。為了保證游戲的流暢性,動畫中包含的多張圖片和聲音資源都需要進行預加載。

4 仿真結果

整個應用實現完成以后,在LG Nexus4手機中得以成功運行。選取了游戲運行時主頁面的幾個運行畫面,運行結果充分顯示出程序運行良好,也基本符合設計要求。如圖5所示,在游戲主頁面中 playerCar是用戶控制的賽車,friendCar由系統控制,圖中出現了兩個道具,分別是能量道具和炸彈道具。如圖6所示,用戶通過點擊屏幕右半部分使playerCar發射炸彈,炸毀一輛friendCar時出現的爆炸動畫。

圖5 游戲主頁面Fig.5 Main page of racing game

圖6 爆炸效果Fig.6 The explosion effect

5 結束語

文中介紹了游戲開發框架libGDX,并基于此框架設計和開發了一款流暢、有趣的Android賽車游戲,玩家通過簡單的交互如點擊手機屏幕左側或右側、輕微搖晃手機就可以體驗本游戲。結果表明,libGDX提供了豐富且易用的接口,使用它來開發手機游戲,在保證功能得以實現的同時,又可以縮短開發時間、降低開發難度。

[1]黎忠文,覃志東,王全宇,等.基于Android平臺手機游戲引擎的設計與實現[J].計算機工程與設計,2014,35(1):119-124.LI Zhong-wen,QIN Zhi-dong,WANG Quan-yu,et al.Design and implementation of mobile game engine based on Android platform[J].Computer Engineering and Design,2014,35(1):119-124.

[2]崔浩然.基于Android平臺的手機游戲的設計與實現[D].西安:西安科技大學2011.

[3]吳慶林.基于libGDX的Android游戲研究與開發[D].廣州:華南理工大學,2012.

[4]水超,李慧.對象池模式的擴展與設計[J].計算機工程,2004,30(9):26-27.SHUI Chao,LIU Hui.Extension and implementation of object pool pattern[J].Computer Engineering,2004,30 (9):26-27.

[5]高春曉,劉玉樹.碰撞檢測技術綜述[J].計算機工程與應用, 2002(5):9-11.GAOChun-xiao,LIUYu-shu.A survey of collision detection[J].Computer Engineering and Applications,2002(5):9-11.

[6]彭艷,楊歐.Android平臺的數據存儲技術[J].計算機系統應用,2012,21(5):192-193.PENG Yan,YANG Ou.Analysis on the data storage of android application[J].Computer Systems&Applications,2012,21(5):192-193.

猜你喜歡
頁面游戲用戶
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
主站蜘蛛池模板: 亚洲成A人V欧美综合天堂| 一级毛片基地| 欧美午夜久久| 精品人妻AV区| 欧美精品在线看| 中国黄色一级视频| 亚洲激情区| 91欧美在线| 日韩最新中文字幕| 国产精品永久不卡免费视频| 亚洲一级毛片| 日本一区高清| 57pao国产成视频免费播放| 国产美女一级毛片| 日韩无码精品人妻| 国产视频一区二区在线观看| 亚洲av无码成人专区| 无码区日韩专区免费系列| 视频在线观看一区二区| 日韩av无码精品专区| 欧洲av毛片| 久久香蕉欧美精品| 国产精品乱偷免费视频| 欧美人与动牲交a欧美精品| 亚洲中文字幕无码爆乳| 麻豆国产精品一二三在线观看| 免费高清自慰一区二区三区| 亚洲性色永久网址| 手机永久AV在线播放| 欧美午夜一区| 亚洲人成人无码www| 免费一级大毛片a一观看不卡| 国产精品青青| 亚洲第一视频网| 久久免费成人| 亚洲色图欧美视频| 欧美不卡在线视频| 精品91在线| 亚洲国产日韩一区| 精品无码一区二区三区电影| 毛片在线播放a| 成人国产小视频| 91福利片| 国产精品欧美在线观看| 国产麻豆aⅴ精品无码| 亚洲精品无码抽插日韩| 青青草一区| 干中文字幕| 日韩免费中文字幕| 日本国产在线| 第一区免费在线观看| jizz在线免费播放| 亚洲精品无码AV电影在线播放| 综合久久久久久久综合网| 夜夜操天天摸| 亚洲一区二区精品无码久久久| 久久久精品无码一二三区| 色屁屁一区二区三区视频国产| 国产在线观看第二页| 日韩一区精品视频一区二区| 97青草最新免费精品视频| 日韩无码精品人妻| 国产SUV精品一区二区6| 国产幂在线无码精品| 亚洲免费播放| 国产乱子伦视频在线播放| 国产一区二区三区在线观看免费| 国产亚洲精品va在线| 国产丝袜一区二区三区视频免下载| 国产精品免费入口视频| 91福利片| 99国产在线视频| 国产精品深爱在线| 日本精品视频| 国产精品成人免费综合| 国产黄网永久免费| 自拍偷拍欧美日韩| 精品久久久久久中文字幕女| 干中文字幕| 国产理论最新国产精品视频| 福利小视频在线播放| 丁香六月综合网|