Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> android技巧:SurfaceView的制作android游戲框架介紹

android技巧:SurfaceView的制作android游戲框架介紹

編輯:Android開發教程

1.介紹

我們知道android游戲主要包含兩方面。一方面是控制類,這個通過一些循環以及監聽機制來實現。另一方面就是顯示類。在現實類中最常見的就是view,view的機制比較適合刷新比較慢的應用,像是象棋之類的。本文要提到的SurfaceView是繼承自view類。surfaceview的好處是可以隨意控制對象的位置,大小等屬性,最關鍵是的提供了SurfaceHolder類,使用getHolder方法獲取,相關的有Canvas lockCanvas() 。下面就來介紹下surfaceview的結構關系。

2.代碼展示

下面是surfaceview的架構,注意注釋!

public class GameView extends SurfaceView implements SurfaceHolder.Callback  
{  
    SurfaceHolder surface; //新建surface對象  
      public GameView(Context context) {  
        super(context);  
        // TODO Auto-generated constructor stub  
        surface = this.getHolder();  
        surface.addCallback(this);//對應SurfaceHoder.Callback接口  
           }  
      public void createImage(){.....}//自己建函數,用來初始化圖片。bitmap對象等  
      public void ondraw(){  
           Canvas c =this.surface.lockCanvas();  
              ……………….  
           surface.unlockCanvasAndPost(c);  
                   }     //自己寫的函數,用canavas畫出bitmap在下面的循環中調用。  
      
//以下三個函數是自動生成的  
@Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)         
     { // TODO Auto-generated method stub  
        length=arg2;//<span style="color:#ff0000">獲得屏幕的高  
</span>     width=arg3;//<span style="color:#ff0000">獲得屏幕寬。真的非常實用</span>  
    }  
      
    @Override
    public void surfaceCreated(SurfaceHolder arg0) {  
        // TODO Auto-generated method stub  
              
        new Thread(new Repaint()).start();//<span style="color:#ff0000">一般在這裡開始循環線程,而不是在構造函數中  
</span>           
    }  
      
    @Override
    public void surfaceDestroyed(SurfaceHolder arg0) {  
        // TODO Auto-generated method stub  
          isRunning=false;//結束循環  
                
    }  
private class Repaint implements Runnable{  
        <span style="color:#ff0000">//runnable循環線程,不停地刷新重繪  
</span>     public void run() {  
            while(isRunning){  
                createImage();  
                ondraw();  
                }  
      
                //刷新  
                                try {  
                    Thread.sleep(50);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
    }

查看本欄目更多精彩內容:http://www.bianceng.cn/OS/extra/

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved