Chinaunix首页 | 论坛 | 博客
  • 博客访问: 379010
  • 博文数量: 466
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-16 13:59
文章分类

全部博文(466)

文章存档

2015年(466)

我的朋友

分类: C/C++

2015-03-16 14:53:59


用的瓷砖是这个样子的,存放于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); 
       } 
   } 
}

阅读(256) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~