| 
  呵呵 这个东西我以前做过。 
用矩型块. 
地图基本分为 背景(Tile) 修饰(MidTile) 物体(Objects) 三个层 
玩家处于 MidTile和Objects之间. 
Tile用96*64的矩形块。 
MidTile使用48*32的矩形块,如其所名,他是用来修饰Tile的就如修饰土与草之间的连接. 
Objects 宽度必须是固定的值并且于MidTile一致高度可以不固定(因为为了产生遮挡效果) 
另外没必要另外做数据来标志地图的某个Cell是否可移动 
See: 
struct MapCellInfo{ 
  WORD   BakIndex; //Tile层 
  WORD   MidIndex;  //MidTile层 
  WORD   FrtIndex; //Objects层 
} 
BakIndex, MidIndex, FrtIndex分别代表了三个层的图象数据索引 
可取的最大值是65535,但是一般一个图象库文件的图片数量都不至于到65535这个值 
所以可以投机取巧来产生移动标记 
See: 
if (BakIndex&0x8000)//不可移动 
  WORD RealImgIdx = BakIndex & 0x7FFF; 
So: 如此一来索引号只能用到的最大值是0x7FFF 
以上是背景数据的索引。 
关于中间的修饰层数据,不必要具有移动标记 
See: Objects层 
上面说到玩家是于MidTile与Objects之间的 那么当绘制完Tile和MidTile后就是绘制Sprite了 
最后还剩下Objects层 
同理我们还是使用: 
if (FrtIndex&0x8000) //不可移动 
  { 
    WORD RealImgIdx  = FrnIndex&0x7fff; 
    if (!RealImgIdx) //这只是处于遮挡区域什么都不要做,处于改位置的人物加一层Alpha混合 
      return; 
    else //Draw you Objects 
  } 
so just so easy! 
try to Known!  |