透明效果
有時候,我們需要在畫面上顯示一張角色的影象,而這張是有自己的背景的,要是直接貼到了遊戲的畫面中,就會出項覆蓋遊戲畫面。顯示出的效果特別不好,這裡我們可以用到透明效果來處理。
其中,原理就是用bitblt() 的raster值運算去掉原的背影。但是只適用於原圖背景為黑色,才會看到效果。
如圖,左邊部分為前景圖,右邊部分為遮蔽圖
前景圖的背景必須為黑色,遮蔽圖的背景為白色
以下為顯示的背景圖
我們怎麼樣使用則會圖來處理透明呢?其實就是raster運算。
將遮蔽圖和背景圖做「and」運算,貼到目的dc; 再將前景圖和背景圖做「or」運算,貼到目的dc;
現在開始編寫程式:
在vs2008中新建win32程式,使用vc預設的框架。
首先定義全域性變數:
hbitmap bg, dra; //用來儲存背景與前景圖
hdc hdc; //用來暫時儲存點陣圖的dc
然後在initinstance()函式中,新增**,繪製圖形。
bool initinstance(hinstance hinstance, int ncmdshow)
movewindow(hwnd, 50, 50, 1024, 768, true);
showwindow(hwnd, ncmdshow);
updatewindow(hwnd);
//建立視窗dc相容dc
hdc = getdc(hwnd);
mdc = createcompatibledc(hdc);
//載入位圖
bg = (hbitmap)loadimage(null, l"bg.bmp", image_bitmap, 1024, 768, lr_loadfromfile);
dra = (hbitmap)loadimage(null, l"dra.bmp", image_bitmap, 170, 99, lr_loadfromfile);
paint(hdc); //繪製透明位圖
releasedc(hwnd, hdc); //釋放dc
return true;
}
其中paint()中**:
void paint(hdc hdc)
最後在wndproc函式中wm_paint訊息中新增重繪
case wm_paint:
hdc = beginpaint(hwnd, &ps);
// todo: 在此新增任意繪圖**...
paint(hdc);
endpaint(hwnd, &ps);
break;
編譯執行程式:
C 遊戲製作 1
xmind部分流程圖 切片與分層 運動系統的搭建 彈簧節,雙剛體 1.新增碰撞體,實現滑鼠與小鳥的互動 2.令碰撞體 小鳥 與滑鼠位置重合 tips 小鳥的座標係為視窗 攝影機 三維 的正 而滑鼠的座標系 二維 預設是螢幕的最左下角 1 修改座標系 把滑鼠的座標系改為攝像機的居中座標系 2 刪除小鳥...
遊戲程式設計學習筆記 1
關於如何編寫乙個遊戲,一直沒有非常系統和深入的學習.之前的時間一直是在進行無目標的埋頭亂看,window api,gdi,directx等.但事實上編寫遊戲需要的知識遠比這些更多.工作以後,由於本身就在遊戲公司,並且目前每天的任務量不大,我也就可以騰出時間系統的學習遊戲程式設計了.從上上個星期開始,...
記錄windows遊戲程式設計 1
程式名稱 gamecore 2020年5月10日 用 勾勒遊戲開發所需要的程式框架 include 巨集 include define window height 600 define window width 800 define window title l 致我們永不熄滅的遊戲開發夢想 程式核...