android 2D遊戲如何繪製螢幕


用幾天的時間我研究了一下android的框架,android是這麼樣開發2D遊戲的。

我們先來講GameCanvas(遊戲畫布) 。這是一個類,你可以這樣理解它-----我們遊戲的畫布。開發遊戲的時候大部分的工作都會在這裡面完成的 。那麼在android 裡面 怎樣構成我們的GameCanvas。

這裡我用了SurfaceView 類,使用這個類的原因是它比較適合遊戲畫布。然後我們再繼承SurfaceHolder.Callback 這個接口


這樣我們的GameCanvas類要實現其幾個方法: public void surfaceCreated(SurfaceHolder holder) {}
public void surfaceDestroyed(SurfaceHolder holder) {}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
 int height) {}

我們在surfaceCreated 方法裡面初始化遊戲,在surfaceChanged 處理一下當手機碰到外界情況的事件,
surfaceDestroyed 方法裡面我們寫釋放資源等。
這樣每個方法裡面都會有個參數 SurfaceHolder 這個是什麼呢??暫且先不討論它,後面你會明白他有什麼用了,
聲明一個SurfaceHolder handle對象,然後在surfaceCreated()方法裡面初始化它 如下:handle = this.getHolder();
handle.addCallback(this);
那在哪裡繪製我們的遊戲畫布呢?講到關鍵的地方了,這裡我們重載view 的 public void draw(Canvas canvas){}方法,
我們就在這個方法裡面繪製我們的遊戲。

public class GameCanvas extends SurfaceView implements SurfaceHolder.Callback
{
    private SurfaceHolder handle = null;
    private int width = 0;
    private int height = 0;

    public GameCanvas(){
        handle = this.getHolder();
        handle.addCallback(this);
    }

    public void initGame(){
        width = this.getWidth();
        height = this.getHeight();
    {

    public void gameLogic(){

    }

    public void gameInput(){

    }

    @Override
    public void draw(Canvas canvas){
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Colcor.Black);

        canvas.drawRect(new Rect(int startX,int StartY,int endX,int endY));//此處的Rect跟java裡面的有點區別
        //,不過差不多 自己寫坐標就行 0,0,320,440
        //上面的語句是將屏幕繪製成黑色

        paint.setColor(Cloor.red);
        canvas.drawText("Andoid GameCanvas",100,100,paint);
        //
    }

    //
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        this. initGame();
        new Thread(this){
            public void run(){
                while(true)
                {
                    long start=System.currentTimeMillis();
                    Canvas canvas = GameCanvas.this.handle.lockCanvas(null);
                    //logic

                    this.draw(canvas);
                    canvas.save();
                    //input()
                    GameCanvas.this.handle.unlockCanvasAndPost(canvas);
                    long end=System.currentTimeMillis();
                    if(100>end-start){
                        try{Thread.sleep(100-(end-start));}catch(Exception e){}
                    }
                 }
            }
         }.start();

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height){

    }

}
 






[本日志由 FindSome 于 2013-02-07 11:11 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Andoid 教學
相關日誌:

评论: 1 | 引用: 0 | 查看次数: 2716
回复回复Hellen[2015-08-02 01:35 AM | del]
Truly, such a helpful websites.
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭