android游戏开发 深度解析利用位图绘制rpg地图

来源:互联网 发布:rc4加密算法 java 编辑:程序博客网 时间:2024/06/10 05:53

先贴代码
着我们采用surfaceview写

package com.mz.demo;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class MySurfaceView extends SurfaceView implements Callback {    private Paint paint;    private Canvas canvas;    private Bitmap map;    private SurfaceHolder sfh;    private int[][] test_map0 = {            { 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 4, 1 },            { 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1 },            { 1, 4, 4, 4, 4, 1, 4, 4, 4, 4, 1, 1 },            { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },            { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },            { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 },            { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 },            { 1, 4, 4, 4, 4, 4, 1, 1, 4, 3, 1, 4 },            { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 },            { 1, 4, 4, 4, 1, 4, 1, 4, 4, 4, 4, 1 },            { 1, 4, 4, 1, 4, 4, 4, 4, 1, 4, 4, 1 },            { 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 4, 4 },            { 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 4, 4 }            };    private int mapx = 0;// map地图的唯一坐标    private int mapy = 0;    private int titleW;// 每一个方块的宽度和高度    private int titleH;    private int n=0;// 每一行的方块数量    public MySurfaceView(Context context) {        super(context);        sfh = this.getHolder();        sfh.addCallback(this);        paint = new Paint();        paint.setAntiAlias(true);        // 图片资源初始化        map = BitmapFactory.decodeResource(getResources(), R.drawable.map);        titleW = 32;        titleH = 32;        n = map.getWidth() / titleW;    }    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {        // TODO Auto-generated method stub    }    public void surfaceCreated(SurfaceHolder holder) {        // TODO Auto-generated method stub        myDraw();    }    private void myDraw() {        // TODO Auto-generated method stub        canvas=sfh.lockCanvas();//实例化        //中间代码绘图过程        //i控制行输出,j控制列输出        for(int i=0;i<test_map0.length;i++){            for(int j=0;j<test_map0[i].length;j++){                canvas.save();                //绘制一个矩形可视区域                canvas.clipRect(j*titleW+mapx, i*titleH+mapy, (j+1)*titleW+mapx, (i+1)*titleH+mapy);                //在每个矩形区域内,将原地图的指定的模块绘制在矩形区域内                canvas.drawBitmap(map, j*titleW+mapx-((test_map0[i][j]-1)%n)*titleW, i*titleH+mapy-((test_map0[i][j]-1)/n)*titleH, paint);                canvas.restore();            }        }        sfh.unlockCanvasAndPost(canvas);//解锁画布    }    public void surfaceDestroyed(SurfaceHolder holder) {        // TODO Auto-generated method stub    }}

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

0 0
原创粉丝点击