地图图层开发
游戏中不免会要绘制地图图层,到底要怎么绘制呢。
1.得到屏幕的长度和宽度的像素,比如320*480;
2.游戏中的地图都是由很多的小的图元构成的,路径啦,陷阱啦,环境啦,都是一个个小的图元组成的。设计好图元的大小,比如20*20。
据此,可以将屏幕用16*24个图元绘制而成。这样就好办了。
3.编写一个GameMap类,类中包括地图信息,同是提供获取地图信息的成员方法getMap()
public class GameMap{
static byte [][][]map={
{0,0,1,0,0,0,1,.........},//16列
.....
.....
{1,0,0,2,3,0,1..........}//共24行
}
{............//第二个地图数据},
{............//第二个地图数据},
........
};
//其中每个二维数组即存放了地图信息,比如0表示路径,1表示陷阱,2表示家等等,
//可以根据自己游戏的需求设计各个图元。当然,事先要有每个图元的图像资源。
public static byte [][] getMap(int level){
return map[level-1];
}
}
4.接下来就可以绘制地图了。
byte [][] currMap;//定义一个当前地图
currMap=getMap(level);//获得当前的地图信息
//初始化图片资源
public void initBitmap(Game father){
Resources r = father.getResources();
hole = BitmapFactory.decodeResource(r,R.drawable.hole);
ball = BitmapFactory.decodeResource(r,R.drawable.ball);
endPoint = BitmapFactory.decodeResource(r,R.drawable.goal);
background = BitmapFactory.decodeResource(r,R.drawable.back);
.......
}
//绘制地图
public void drawMap(Canvas canvas){
for(int i=0;i<currMap.length;i++){
for(int j=0;j<currMap[i].length;j++){//逐个图元位置扫描,在相应位置绘制相应的图元,从而生成地图
switch(currMap[i][j]){
case 1:
canvas.drawBitmap(hole, j*tileSize, i*tileSize, null);
break;
case 2:
canvas.drawBitmap(ball, j*tileSize, i*tileSize, null);
break;
case 3:
canvas.drawBitmap(endPoint, j*tileSize, i*tileSize, null);
break;
}
}
}
}
这样,就可以绘制出所需要的地图了。
关于图片分割的实现,可以用地图编辑器实现,Mappy、Tiled、TILE STUDIO。但是我还是不会用,有谁会用这些编辑器实现图形界面的编辑,一起分享一下!