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