加载图片的问题
没有接触过游戏开发的我,当准备开始学习游戏开发的时候,总觉得游戏开发是神秘的,需要很牛的技术才能实现。
以前做过很多应用程序,基本上都是拖动控件,用很少的代码就能实现。
比如加载图片,用pascal的话只需要在你放置图片的地方,放一个image控件即可,不需要写一行代码,还可以根据属性设置设置不同的效果。
由于是第一次玩这么高深的东西(自己感觉)。很简单的一个问题,被我想复杂化了。
加载游戏场景和人物(其实就是两张图片---------哈哈)
源码:
声明全局变量
HBITMAP bit;
HDC MemDC;
int w,h;
CString dir;
int p;
BOOL loadbmp(CString cc);
BOOL loadbmp(CString cc)
{
DeleteObject(bit);
bit=(HBITMAP)LoadImage
(AfxGetInstanceHandle(),
cc,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION
);
其实以上部分已经把图片加载到bit,下面的部分是获取图片的信息,高度和宽度
if(bit==NULL) return FALSE;
DIBSECTION ds;
BITMAPINFOHEADER &bm = ds.dsBmih;
GetObject(bit,sizeof(ds),&ds);
w = bm.biWidth;
h = bm.biHeight;
return TRUE;
}
显示图片的功能
CClientDC dc(this);//这里告诉图片 你将要显示到客户区 下面要用到
CString cc;
p=0;
MemDC = CreateCompatibleDC(0);//暂存设备场景
dir="图片/";
//加载地图
cc=dir+"地面.BMP";
if(loadbmp(cc)==FALSE)
AfxMessageBox(cc+"没找到!");
SelectObject(MemDC,bit); 建立关联,不然如何让图片显示呢
BitBlt(dc.m_hDC,0,0,300,300,MemDC,0,0,SRCCOPY);//就理解它为让内存中的图片显示到客户区吧
//加载人
cc.Format("%s人/c%05d.bmp",dir,p);
if(loadbmp(cc)==FALSE)
AfxMessageBox(cc+"没找到!");
SelectObject(MemDC,bit);
BitBlt(dc.m_hDC,200,200,w,h,MemDC,0,0,SRCCOPY);
上面就实现了一个非常简单游戏场景加载,虽然什么实质内容也没有。