|
发表于 2004-8-16 08:31:00
|
显示全部楼层
Re:小地图如何制作?
为了方便使用,我们将生成小地图编成game类中的函数。
//**************************************************
//getsmap(CString dir,CString cc)//生成小地图
// A.调地面块到地图设备场景BkDC0
// B.全地图缩成小地图// C.全地图景物微缩
//**************************************************
void game::getsmap(CString dir,CString cc)//生成小地图
{//A.调地面块到地图设备场景BkDC0
if(!getpic(dir+cc,1)) return ;//调地面块
HBITMAP OldMak=(HBITMAP)SelectObject(MemDC,bitmap);
BitBlt(BkDC0,0,0,w,h,MemDC,0,0,SRCCOPY);
SelectObject(MemDC, OldMak);
//B.全地图缩成小地图
int i,j;
for(i=0;i<mapw;i=i+mapw/SCRP)
for(j=0;j<maph;j=j+maph/SCRP)
TransparentBlt2 (SMAP,i,j,mapw/SCRP,maph/SCRP,
BkDC0,0,0,WIDTH,HEIGHT, RGB(0,0,0));
//C.全地图景物微缩
int wi=WIDTH*SCRP,he=HEIGHT*SCRP;
for(int q=0;q<rs;q++)
if(man[q].lb==2) //是静物
{cc.Format("%s/树石/b%04d.bmp",dir,man[q].p);//取图片名
if(getpic(cc,1)==FALSE) return;//读取位图文件cc
int x=(man[q].xix-w/4)*mapw; //x当前位置
int y=(man[q].xiy-h)*maph; //y当前位置
HBITMAP OldMak=(HBITMAP)SelectObject(MemDC, bitmap);
TransparentBlt2(SMAP,x/wi,y/he,(w*mapw)/wi,(h*maph)/he,
MemDC,0,0,w,h, RGB(0,0,0));
SelectObject(MemDC, OldMak);
}
} |
|