文/甘廷杰,重慶育才中學(xué)
在移動(dòng)互聯(lián)網(wǎng)技術(shù)出現(xiàn)以前,廣大的PC用戶把PC上面的游戲軟件當(dāng)作閑暇 時(shí)間不可或缺的一種娛樂方式,從最早期的“俄羅斯方塊”,到后來的“冒險(xiǎn)島”,再 到后來的“魂斗羅”,甚至“連連看”,這些無一不給我們留下了非常深刻的,愉悅的 記憶,與此同時(shí),也給游戲軟件的創(chuàng)作者帶來了非??捎^的收入與名聲。但是,隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的發(fā)展,以及像iPhone和android等智能手機(jī)的出現(xiàn),之前競 爭異常激烈的異常繁榮的電腦游戲軟件行業(yè),越來越多的游戲軟件開發(fā)者把 目光投向了手機(jī)游戲軟件這一新興的空間更大,利潤更可觀的行業(yè)。
Android 作為一個(gè)開源的移動(dòng)設(shè)備的平臺,其軟件層次結(jié)構(gòu)自上而下分為四個(gè)層次, 分別是:應(yīng)用程序(Application)、應(yīng)用程序框架(Application Framework)、各種庫 (Libraries)和 Android 運(yùn)行環(huán)境(RunTime)、Linux 內(nèi)核 (Linux Kernel)。
Android 應(yīng)用程序由一個(gè)或多個(gè)組件組成,Android 的應(yīng)用程序框架為應(yīng)用程序?qū)拥?開發(fā)者提供 APIs,它實(shí)際上是一個(gè)應(yīng)用程序的框架。由于上層的應(yīng)用程序是以 Java 構(gòu) 建的,因此本層次提供的首先包含了 UI 程序中所需要的各種控件:
例如:Views(視圖組件)包括 lists(列表 ),grids(柵格),text boxes(文本框), buttons(按鈕)等。甚至一個(gè)嵌入式的 Web 瀏覽器。
這里首先介紹下手機(jī)游戲開發(fā)制作流程,其開發(fā)周期可以分為以下:游戲的策劃, 企劃書的編寫,美工及背景音樂的創(chuàng)作,游戲程序的代碼編寫與調(diào)試,游戲的測試,Demo 版的發(fā)布,對Demo版的再測試,正式版的發(fā)布。
通常情況下,游戲開發(fā)的基本框架中,一般包括以下模塊:
窗口管理(Window management):該模塊負(fù)責(zé)在Android平臺上創(chuàng)建、運(yùn)行、暫停、恢復(fù)游戲界面等功能。
輸入模塊(Input):該模塊和視窗管理模塊是密切相關(guān)的,用來監(jiān)測追蹤用戶的輸入(比如觸摸事件、按鍵事件、加速計(jì)事件等)。
文件輸入輸出(File I/O):此模塊用來讀取assets文件下圖片、音頻等資源。
圖像模塊(Graphics):在實(shí)際游戲開發(fā)中,這個(gè)模塊或許是最復(fù)雜的部分。它負(fù)責(zé)加載圖片并把它們繪制到屏幕上。
音頻模塊(Audio):這個(gè)模塊負(fù)責(zé)在不同的游戲界面加載音各類頻。
網(wǎng)絡(luò)(networking):如果游戲提供多人游戲聯(lián)網(wǎng)功能,此模塊就是必須的。
游戲框架(Game framework):該模塊把以上各種模塊整合起來,提供一個(gè)易用的框架,來輕松地實(shí)現(xiàn)我們的游戲。
按照功能劃分,我們可以把一個(gè)簡單的游戲框架劃分為三個(gè)板塊:
整體控制層:在 Android 游戲中一般是通過 Activity 控制整個(gè)游戲發(fā)展的流程,包 括進(jìn)入歡迎界面、游戲加載、進(jìn)入游戲界面、進(jìn)入幫助界面,以及啟動(dòng)游戲、暫停游戲、 結(jié)束游戲等。
界面表現(xiàn)層:此層包括圖層對象和視圖對象。圖層對象定義圖層的寬和高、圖層的 位置、圖層的移動(dòng)以及圖層的繪制方法等;視圖對象的主要作用是繪制圖層對象、響 應(yīng)鍵盤事件和處理視圖線程等。
數(shù)據(jù)存儲層:保存游戲的數(shù)據(jù),例如在游戲中設(shè)計(jì)的用來封裝常用數(shù)據(jù)常量的類以 及在退出游戲時(shí)用來保存當(dāng)前游戲進(jìn)度的文件等。
游戲工作的流程又分為:處理用戶的輸入、更新狀態(tài)、并呈現(xiàn)給用戶。用戶在游戲中能最大化感受的是游戲的交互性。其中,畫面視圖的交互又是其最直觀的表現(xiàn)形式。因此,在整個(gè)游戲開發(fā)過程中,視圖對象是我們需要處理的重點(diǎn)對象,也是用戶能看到的最直接的對象。
在Android平臺下,提供了View、SurfaceView類作為視圖類的基類。我 們首先看下以View類作為基類的視圖類的開發(fā)。在Android中,任何一View類都只需要重寫其中的onDraw()方法來實(shí)現(xiàn)界面的繪制。游戲的核心是不斷的繪圖和刷新界面, 在Android中最常用的方法是利用Handler來實(shí)現(xiàn)UI線程的更新,也可以直接在run()方法 中使用postInvalidate()方法在線程中更新界面。其次,是SurfaceView類開發(fā)框架。當(dāng)需 要開發(fā)復(fù)雜的游戲,而且對程序的執(zhí)行效率很高時(shí),View類就不能滿足需求了,這時(shí)必 須用SurfaceView類進(jìn)行開發(fā),這也是主流的開發(fā)框架。一般在使用時(shí)需要對其進(jìn)行創(chuàng)建、 銷毀,情況改變時(shí)要進(jìn)行監(jiān)視,這就要實(shí)SurfaceHolder.Callback接口,如果要對被繪制的畫布進(jìn)行裁減,控制其大小時(shí)都需要使用SurfaceHolder來完成處理。在程序中, SurfaceHolder對象需要通過getHolder方法來獲得,同時(shí)還需要addCallback方法來添加 “回調(diào)函數(shù)”。
一般 surfaceCreated 方法用來在開始繪制視圖對象時(shí)初始化和啟動(dòng)所需的各個(gè) 線程,而 surfaceDestroyed 方法用來在繪制視圖對象結(jié)束時(shí)停止各個(gè)線程。這里通 過實(shí)現(xiàn) Runnable 接口來實(shí)現(xiàn)刷幀線程,也可以通過創(chuàng)建內(nèi)部的線程類來實(shí)現(xiàn)刷幀線程。 最后在 Activity 類中,調(diào)用 setContentView(GameSurfaceView 的對象)實(shí)現(xiàn)視圖對象的顯示。
因此,在主流的Android游戲開發(fā)的框架中,我們都會(huì)使用到SurfaceView這個(gè)類表現(xiàn)視圖界面,SurfaceView 雙緩沖繪圖機(jī)制來實(shí)現(xiàn)視圖界 面,加載界面進(jìn)度條技術(shù)的設(shè)計(jì)實(shí)現(xiàn)等等。
[1]馬欣.基于智能手機(jī)的游戲軟件技術(shù)研究[D]. 蘇州大學(xué)2015》