用的瓷砖是这个样子的,存放于Tile页面(tileWidth*tileHeight)中,定义常量
tileWidth=64;tileHeight=32;
绘制在画布上,定义常量
canvasWidth=1024;canvasHeight=768;
首先绘制一个锯齿型的地图,存放于Tile页面(tileWidth*tileHeight)中
观察之,偶数行需要有1/2*tileWidth的缩进,奇数行不需要;同样,偶数行还需要有1/2*tileHeight的上升。
int i,j;
int w,h;
for(j=0;j<12;j++)
{
for(i=0;i<12;i++)
{
w=i*tileWidth+(j&1)*tileWidth/2;
h=j*tileHeight/2;
lpDDSBack->BltFast(w,h,lpDDSTile,NULL,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
}
}
i,j作为列、行标 (地图行列坐标)
w,h作为Back页面(canvasWidth*tileHeight)的绝对位置 (画布 x,y 坐标)
(j&1)---> 用来计算, j 是奇数还是偶数, (奇数&1) == 1, (偶数&1) == 0
再试试钻石型地图,我比较喜欢这个类型,就是DIABLO用的地图。
需要设置一些辅助变量,因为绘图都是从画布的中间开始,所以确定midW,midH
int i,j;
int midW,midH,maxW,maxH,temp;
midW=canvasWidth/2;
maxW=midW/tileWidth;
midH=canvasHeight/2;
maxH=midH/tileHeight;
for(j=0;j<=2*maxH;j++)
{
if(j<=maxW)
{
for(i=0;i<=j;i++)
{
w=midW-(j+1)*tileWidth/2+i*tileWidth;
h=j*tileHeight/2;
lpDDSBack->BltFast(20+w,100+h,lpDDSTile,NULL,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
}
}
else
{
temp=2*maxW-j;
for(i=0;i<=temp;i++)
{
w=midW-(temp+1)*tileWidth/2+i*tileWidth;
h=j*tileHeight/2;
lpDDSBack->BltFast(20+w,100+h,lpDDSTile,NULL,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT);
}
}
}
阅读(3901) | 评论(0) | 转发(1) |