Android学习笔记:RPG游戏地图绘制理解

 

      首先,可以参考上篇博文《根据系列图片绘制动画理解》将动画制作出来;

      其次,地图绘制可以借助工具,得到相应的地图数组数据;

      最后,有了地图数组数据,则可以从提供的地图库文件根据ID得到相应的地图块,然后画在屏幕上;

 

因为地图数组数据比较容易得到,再次不过多阐述,分析关键的绘图原理机制:

1.         准备一张地图库文件(其中包含了所有地图上需要的图形元素,如右所示),所有的地图元素都从这里面切割出去,然后绘制成想要的东西;

2.         可以由工具得到想要的地图数组数据,如下:

//第一层游戏View地图数组

     public int [][]mMapView = {

         { 1, 1, 1, 1, 137, 137, 137, 1, 1, 1 },

         { 1, 1, 1, 1, 137, 137, 137, 1, 1, 1 },

         { 1, 1, 1, 1, 137, 137, 137, 1, 1, 1 },

         { 137, 137, 137, 137, 137, 137, 137, 137, 137, 137 },

         { 137, 137, 137, 137, 137, 137, 137, 137, 137, 137 },

         { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137 },

         { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137 },

         { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137 },

         { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137 },

         { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137 },

         { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137 },

         { 137, 137, 137, 137, 137, 137, 137, 137, 137, 137 },

         { 137, 137, 137, 137, 137, 137, 137, 137, 137, 137 },

         { 1, 1, 1, 1, 1, 137, 137, 137, 1, 1 },

         { 1, 1, 1, 1, 1, 137, 137, 137, 1, 1 }

         };

//第二层游戏实体actor数组

     public int [][]mMapAcotor  = {

         { 102, 103, 103, 104, 0, 0, 0, 165, 166, 167 },

         { 110, 111, 111, ......

                     ......

 

3.         通过2中的地图数组数据,我们可以代码中动态的切割上面的地图库文件来进行绘制;


此处TILE_HEIGH_COUNT为纵向tile的数量,TILE_WIDTH_COUNT为横向tile的数量,viewId代表在地图库文件中的具体位置,actorId也是一样,那么通过一个id是如何找到在地图库文件中的位置的呢?我们来看看DrawMapTile()方法是如何实现的:


 

由此处代码可以看出,tile的id在地图库文件中是按横向顺序排列的方式定义的,假如横排10个,竖排15个,现在有一个ID为66的tile,则应该在第7行的第7个位置。按照上面的算法,id-- = 65;int count = 65/10=6;

Int bitmapX = (66-(6*10))*32 = 6*32,int bitmapY = 6*32,于是可以根据这个tile的x和y的具体值可以找到地图库文件中的一个矩形区域,然后接下来,变为想到的一个tile,于是整个地图便是由一个一个这样的tile得到而来。

 

 

posted on 2012-02-15 17:05  duancanmeng  阅读(464)  评论(0编辑  收藏  举报

导航