Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5513681
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: C/C++

2012-05-30 10:50:01


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

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