淺談Android游戲開發(fā)基礎(chǔ)和經(jīng)驗
Android游戲開發(fā)基礎(chǔ)和經(jīng)驗是本文要介紹的內(nèi)容,主要是來了解并學習Android游戲開發(fā)的內(nèi)容實例,具體關(guān)于Android游戲開發(fā)內(nèi)容的詳解來看本文。
做一個類似俄羅斯方塊的android游戲開發(fā),游戲完全又觸屏來實現(xiàn)還有音樂播放等等一些基本的功能,游戲是基于 android sdk1.6完成。由于初識android,這個游戲也是本人第一個android游戲開發(fā),所以還有很多不足,這里只是想分享一下在開發(fā)過程中一些自己總結(jié)的經(jīng)驗和小技巧,希望對新手有所幫助,高手也請不吝賜教。
一、首先我們應(yīng)該知道android游戲開發(fā)的一些基本框架。
Android游戲開發(fā)中首先是View類開發(fā)框架。在Android游戲開發(fā)中,任何一個View類都只需要重寫onDraw方法來實現(xiàn)界面顯示。游戲的核心是不斷的繪圖和刷新界面,在 Android中最常用的方法是利用Handler來實現(xiàn)UI線程的更新,也可以直接在run方法中使用postInvalidate()方法在線程中更新界面。其次,是SurfaceView類開發(fā)框架。
當需要開發(fā)復雜的游戲,而且對程序的執(zhí)行效率很高時,View類就不能滿足需求了,這是必須用 SurfaceView類進行開發(fā),這也是主流開發(fā)框架。在使用時需要對其進行創(chuàng)建、銷毀,情況改變時進行監(jiān)視,這就要實現(xiàn) SurfaceHOlder.Callback接口,如果要對被繪制的花布進行裁減,控制其大小時都需要使用SurfaceHOlder來完成處理。在程序中,SurfaceHOlder對象需要通過getHolder方法來獲得,同時還需要addCallback方法來添加“回調(diào)函數(shù)”。
例如下面一個簡單的SurfaceView類框架:
- public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable {
- SurfaceHolder mSurfaceHolder = null;
- public GameSurfaceView(Context context) {
- super(context);
- mSurfaceHolder = this.getHolder();
- mSurfaceHolder.addCallback(this);
- this.setFocusable(true);
- }
- public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){
- }
- public void surfaceCreated(SurfaceHolder holder ){
- new Thread(this).start();
- }
- public void surfaceDestroyed(SurfaceHolder holder){
- }
- public void run(){
- while (true){
- try{
- Thread.sleep(1000);
- }
- catch(Exception e){
- }
- synchronized(mSurfaceHolder){
- Draw();
- }
- }
- }
- private void Draw() {
- Canvas canvas= mSurfaceHolder.lockCanvas();
- ......
- mSurfaceHolder.unlockCanvasAndPost(canvas);
- }
- }
然后在activity類中 :setContentView(GameSurfaceView的對象)。
二、游戲開發(fā)中常用到的基本類
Android游戲開發(fā)中通過graphics類來顯示2D圖形,graphics中包括了Canvas(畫布)、Paint(畫筆)、Color(顏色)、Bitmap(圖片)等常用類。
例如繪制字符串用canvas類的drawText方法來實現(xiàn),drawRect用來繪制矩形,設(shè)置透明度可以用paint類的setAlpha,同時 Color.rgb方法可以直接獲得整形數(shù)值代表的顏色。此外在繪制圖片時應(yīng)該首先從資源文件中裝載圖片,然后才能繪制到屏幕上去。具體代碼如下:Bitmap mypic = null; mypic=((BitmapDrawable)getResources().getDrawable(R.drawable.pic)).getBitmap(); Canvas canvas = new Canvas(); canvas.drawBitmap(mypic,x,y,null);
三、關(guān)于自適應(yīng)屏幕分辨率的問題
Android游戲開發(fā)中每款手機分辨率的不同注定是程序員開發(fā)游戲必須考慮的問題,怎樣才能寫一個程序而達到可以在不同分辨率的機子上運行良好,這將是決定一個游戲好壞的重要因素之一。在游戲資源res下有三個和圖片存儲有關(guān)的文件夾:drawable-hdpi、drawable-mdpi、drawable-ldpi。
drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854),drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480),drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320),系統(tǒng)會自動根據(jù)機器的分辨率來分別到這幾個文件夾里面去找對應(yīng)的圖片。當然,除了準備好幾組不同分辨率的圖片以外,在代碼中圖片坐標和觸屏事件的坐標都要靈活的處理,這樣才能實現(xiàn)一個程序多機型運行的目標。
- DisplayMetrics dm = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- int screenWidth = dm.widthPixels;
- int screenHeight = dm.heightPixels;
通過以上代碼可以獲得當前機型的屏幕像素,然過比列換算可以實現(xiàn)代碼中坐標的靈活應(yīng)用。
四、如何鎖定屏幕是橫屏還是豎屏
一款游戲通常不會設(shè)計成橫屏豎屏都可玩,會固定成橫屏或豎屏。Android游戲開發(fā)中只需在AndroidManifest.xml里面配置一下就可以了,加入這一行
- android:screenOrientation="landscape"
例如(landscape是橫向,portrait是縱向)。
五、view與view之間的跳轉(zhuǎn)
Android游戲開發(fā)中一個游戲不會只有一個view,比如歡迎動畫,游戲畫面,菜單頁面等等,如何實現(xiàn)它們之間的跳轉(zhuǎn),這里有一個方法,就是用Handler類實現(xiàn)。直接看代碼:
- Handler myHandler = new Handler(){
- public void handleMessage(Message msg){
- if(msg.what == 1){
- //控制頁面的顯示...
- }
- if(msg.what == 2){
- //控制頁面的顯示...
- }
- }
- };
然后用:myHandler.sendEmptyMessage(1)來實現(xiàn)切換。
小結(jié):淺談Android游戲開發(fā)基礎(chǔ)和經(jīng)驗的內(nèi)容介紹完了,希望通過Android游戲開發(fā)內(nèi)容的學習能對你有所幫助!