載入圖片的問題

露水上的青蛙發表於2013-07-31

沒有接觸過遊戲開發的我,當準備開始學習遊戲開發的時候,總覺得遊戲開發是神祕的,需要很牛的技術才能實現。

以前做過很多應用程式,基本上都是拖動控制元件,用很少的程式碼就能實現。

比如載入圖片,用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);

 

上面就實現了一個非常簡單遊戲場景載入,雖然什麼實質內容也沒有。

相關文章