ステージを表示しよう!

Android

ステージを表示します。

private SurfaceHolder surfaceHolder;
private Thread thread;

thread = new Thread(this);
thread.start();

public void run() {

    if(thread.isAlive()){
    Canvas canvas = getHolder().lockCanvas();

    //ここに描画処理を記載

    getHolder().unlockCanvasAndPost(canvas);

   }
}

が今回のポイントです。

描画用のスレッドを作り、描画の前後で処理をロック、アンロックします。

今回は菱形の路面や壁を段違いに並べるのでちょっと複雑なコーディングに見えますが縦横を順番に表示しているだけです。

Bとあるのはチェックポイントです。

これだけでもゲームの画面ぽいですね。

GameStage.java


import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.SurfaceView;
import android.view.SurfaceHolder;
import java.lang.Runnable;


public class GameStage extends SurfaceView implements SurfaceHolder.Callback , Runnable {
    private SurfaceHolder surfaceHolder;
    private Thread thread;

    private Bitmap[] imageStage = new Bitmap[10];    //
    private int[][] stageData1 = {{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,0,0,0,0,0},
                                    {0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,0,0},
                                    {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0},
                                    {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0},
                                    {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0},
                                    {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0},
                                    {0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0},
                                    {0,0,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
                                    {0,0,0,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
                                    {0,0,0,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
                                    {0,0,0,0,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
                                    {0,0,0,0,0,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
                                    {0,0,0,0,0,0,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
                                    {0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
                                    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};

    static double drawingCenterX,drawingCenterY;    //描画の仮想中心


    GameStage(Context context) {

        super(context);
        //surfaceHolder = new SurfaceHolder():
        //SurfaceHolderの取得
        surfaceHolder = getHolder();
        //SurfaceViewイベントの通知先の指定
        surfaceHolder.addCallback(this);
        drawingCenterX = 8500.0;        //描画の中心X
        drawingCenterY = -200.0;         //描画の中心Y

    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        Resources rsc = getResources();
        imageStage[0]= BitmapFactory.decodeResource(rsc,R.drawable.wall);
        imageStage[1]= BitmapFactory.decodeResource(rsc,R.drawable.road);
        imageStage[2]= BitmapFactory.decodeResource(rsc,R.drawable.goal);
        imageStage[3]= BitmapFactory.decodeResource(rsc,R.drawable.road_a);
        imageStage[4]= BitmapFactory.decodeResource(rsc,R.drawable.road_b);
        imageStage[5]= BitmapFactory.decodeResource(rsc,R.drawable.road_c);
        imageStage[6]= BitmapFactory.decodeResource(rsc,R.drawable.road_d);
        imageStage[7]= BitmapFactory.decodeResource(rsc,R.drawable.road_e);
        imageStage[8]= BitmapFactory.decodeResource(rsc,R.drawable.road_f);
        imageStage[9]= BitmapFactory.decodeResource(rsc,R.drawable.road_g);
        thread = new Thread(this);
        thread.start();

    }

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

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        thread = null;
    }


    @Override
    public void run() {

        if(thread.isAlive()){
        Canvas canvas = getHolder().lockCanvas();

        for(int j = 0; j <32 ; j+=2){
            for (int i = 0; i < 32 ; i++){
                //偶数行
                canvas.drawBitmap(imageStage[stageData1[j][i]],i * imageStage[1].getWidth()-imageStage[1].getWidth()/2-(int)drawingCenterX,
                        j * imageStage[1].getHeight()/2 - imageStage[1].getHeight()/2-imageStage[stageData1[j][i]].getHeight()-(int)drawingCenterY,null);
            }
            for (int i = 0; i < 32 ; i++){
                //奇数行
                canvas.drawBitmap(imageStage[stageData1[j+1][i]],(i) * imageStage[1].getWidth()-(int)drawingCenterX,
                        (j) * imageStage[1].getHeight()/2-imageStage[stageData1[j+1][i]].getHeight()-(int)drawingCenterY,null);
            }
        }


        getHolder().unlockCanvasAndPost(canvas);

       }
    }
}


 

 

今回はここまで。

 

タイトルとURLをコピーしました