加载图片的问题

没有接触过游戏开发的我,当准备开始学习游戏开发的时候,总觉得游戏开发是神秘的,需要很牛的技术才能实现。

以前做过很多应用程序,基本上都是拖动控件,用很少的代码就能实现。

比如加载图片,用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);

 

上面就实现了一个非常简单游戏场景加载,虽然什么实质内容也没有。

posted @ 2013-07-31 12:36  露水上的青蛙  阅读(356)  评论(0编辑  收藏  举报