背景物品更简单,包括草丛,树木,河流,win标志。这些背景物品只需要显示,不涉及逻辑处理。
存储:用数组+游标的方法,如下:
struct MapObject MapBkArray[MAX_MAP_OBJECT];
int iMapBkObjNum;
第一关的背景物品数据:
17 5 3 2 0(草丛)
76 7 3 2 1(win标志)
10 10 3 2 2(河流)
含义和地图物品相同。
背景物品加载:和地图物品加载方法相同。
加载函数:int GAMEMAP::LoadMap()
代码: while(temp[0]!='#' && !feof(fp))
{
sscanf(temp,"%d %d %d %d %d",
&MapBkArray[i].x,
&MapBkArray[i].y,
…...
MapBkArray[i].iframe=0;
iMapBkObjNum++;
i++;
//下一个物品
FGetLineJumpCom(temp,fp);
}
显示:
函数:void GAMEMAP::ShowBkObj(MYANIOBJ & bmobj)
代码:
for(i=0;i<iMapBkObjNum;i++)
{
bmobj.DrawItem(xstart,ystart,MapBkArray[i].id,ibkobjframe);
}
帧刷新:背景物品都是2帧动画。所有背景物品当前帧用ibkobjframe控制。
函数:void GAMEMAP::ChangeFrame(int itimeclip)
代码:
if(0 == itimeclip% WATER_SPEED)
{
ibkobjframe=1-ibkobjframe;
至此,背景物品的功能完成。地图怎样跟随玩家移动呢? 且听下回分解。
附:
超级玛丽第一版源码链接:http://download.youkuaiyun.com/source/497676
超级玛丽增强版源码链接:http://download.youkuaiyun.com/source/584350