呵呵 这个东西我以前做过。
用矩型块.
地图基本分为 背景(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! |