AndEngine Tiled地图编辑器


AndEngine是支持Tiled地图编辑器的,Tiled地图编辑器是很强大的,而且AndEngine对它的支持也很好,甚至可以设置碰撞以及动画的地图,可以参照AndEngineExample。

但是有时候我们只是需要一个简单的二维数组来表示一个地图,我们不会设置复杂的地形已经碰撞的检测,这时我们就需要自定义我们需要的地图了!(PS:AndEngine中对Tiled的扩展也是基于这个原理的)。


原理:用一个二维数组来表示地图,每一个数组元素对应于Tile的TextureRegion的索引,二维数组的元素值就是当前地图资源的索引值的数组!


原理很简单,实现是用AndEngine为我们提供的SpriteBatch来绘制的,它会大大的增加绘制的效率,关于SpriteBatch的详细介绍。

1.初始化地图的二维数组

这里为了简单,只做了一个网格规则的地图,如果需要更丰富的地图信息,添加更多的地图Tiled资源和对应的绘制就可以了!

(PS:用了个小算法定义出相邻的两个Tiled使用不同的图片资源)

[java]  view plain copy
  1. <span style="font-size:18px;">/** 
  2.      * 初始化地图,为了做出网格的效果,用了两张图片交替绘制 
  3.      */  
  4.     private void initMap()  
  5.     {  
  6.         for (int i=0; i<MAP_BG.length; i++)  
  7.             for (int j=0; j<MAP_BG[i].length; j++)  
  8.             {  
  9.                 if ((i + j) % 2 == 1)  
  10.                 {  
  11.                     MAP_BG[i][j] = 1;  
  12.                 }  
  13.             }  
  14.     }</span>  

2.SpriteBatch根据二维数组绘制地图

绘制的规则就是根据地图二维数组的元素值对应不同的图片Tiled资源,如果需要更复杂的地图,可以定义更复杂的对应规则

使用SpriteBatch的原因是为了提高绘制的效率,SpriteBatch对Tiled资源的共享做了优化!

[java]  view plain copy
  1. <span style="font-size:18px;">/** 
  2.      * 初始化SpriteBatch 
  3.      */  
  4.     private void initBGSpriteBatch()  
  5.     {  
  6.         bgSpriteBatch = new SpriteBatch(bgBitmapTextureAtlas, MAP_BG.length * MAP_BG[0].length, getVertexBufferObjectManager());  
  7.           
  8.         for (int i=0; i<MAP_BG.length; i++)  
  9.             for (int j=0; j<MAP_BG[i].length; j++)  
  10.             {  
  11.                 if (MAP_BG[i][j] == 0)  
  12.                 {  
  13.                     bgSpriteBatch.draw(bg0TextureRegion, j * TILE_SIZE, i * TILE_SIZE,   
  14.                             TILE_SIZE, TILE_SIZE, 01111);  
  15.                 }  
  16.                 else if (MAP_BG[i][j] == 1)  
  17.                 {  
  18.                     bgSpriteBatch.draw(bg1TextureRegion, j * TILE_SIZE, i * TILE_SIZE,   
  19.                             TILE_SIZE, TILE_SIZE, 01111);  
  20.                 }  
  21.             }  
  22.           
  23.         bgSpriteBatch.submit();  
  24.     }</span>  
(PS:记得调用SpriteBatch.submit())


源码下载地址:点击下载

你可能感兴趣的:(java,算法,优化,扩展)