1.虛擬鍵碼:windows系統下所有的按鍵被視為虛擬鍵(包含滑鼠在內),每乙個虛擬鍵都有其對應的虛擬鍵碼;
2.鍵盤訊息
(1)vm_kewdown:按下按鍵訊息;
(2)vm_keyup :鬆開按鍵訊息;
(3)vm_char :字元訊息,當按下的按鍵為定義於ascii碼中的可列印字元時,便發出此字元訊息;
3.系統鍵
(1)vm_syskeydown:按下系統鍵訊息;
(2)vm_syskeyup :鬆開系統鍵訊息;
1.lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
(1)wparam:表示按下按鍵的虛擬鍵碼;
1.首先設定人物的起始貼圖座標和起始方向,用0、1、2、3表示上、下、左、右,起始設為0;
2.初始化函式中,除貼背景圖外,根據方向選擇要貼的人物,還有根據方向判斷人物圖的寬和高,以便進行透明處理和貼圖
操作,此時若沒有按鍵操作,winmain函式將每隔一段時間進行貼圖操作,從而實現了人物的原地跑動;
3.若此時按下向下的按鍵,訊息處理函式接收按鍵訊息,接著要判斷當前人物所處的方向,根據不同的方向,適當修正,只要有
明顯下移就可以,然後判斷y的值不能比地圖的高還大,要設臨界值;
4.更改了貼圖座標後,把方向設為1(下是1),然後就去指向繪圖函式,然後又是重複2的操作;
int num,dir,x,y;//num:連續圖中的小圖編號;dir:人物移動的方向;x,y為人物貼圖座標
atom myregisterclass(hinstance hinstance);
bool initinstance(hinstance, int);
lresult callback wndproc(hwnd, uint, wparam, lparam);
void mypaint(hdc hdc);
int apientry winmain(hinstance hinstance,
hinstance hprevinstance,
lpstr lpcmdline,
int ncmdshow)
while( msg.message!=wm_quit )
else
}return msg.wparam;
}atom myregisterclass(hinstance hinstance)
bool initinstance(hinstance hinstance, int ncmdshow)
movewindow(hwnd,10,10,640,500,true);
showwindow(hwnd, ncmdshow);
updatewindow(hwnd);
hdc = getdc(hwnd);
mdc = createcompatibledc(hdc);
bufdc = createcompatibledc(hdc);
bmp = createcompatiblebitmap(hdc,640,480);
selectobject(mdc,bmp);
x = 300;
y = 250;//人物的起始貼圖位置(300,250)
dir = 0;//起始面向上
num = 0;
girl[0] = (hbitmap)loadimage(null,"girl0.bmp",image_bitmap,440,148,lr_loadfromfile);
girl[1] = (hbitmap)loadimage(null,"girl1.bmp",image_bitmap,424,154,lr_loadfromfile);
girl[2] = (hbitmap)loadimage(null,"girl2.bmp",image_bitmap,480,148,lr_loadfromfile);
girl[3] = (hbitmap)loadimage(null,"girl3.bmp",image_bitmap,480,148,lr_loadfromfile);
bg = (hbitmap)loadimage(null,"bg.bmp",image_bitmap,640,480,lr_loadfromfile);
mypaint(hdc);
return true;
}void mypaint(hdc hdc)
bitblt(mdc,x,y,w,h,bufdc,num*w,h,srcand);
bitblt(mdc,x,y,w,h,bufdc,num*w,0,srcpaint);
bitblt(hdc,0,0,640,480,mdc,0,0,srccopy);
tpre = gettickcount();
num++;
if(num == 8)
num = 0;
}//esc鍵結束程式
//方向鍵重設貼圖座標
lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)
if(y < 0)
y = 0;
dir = 0;
break;
case vk_down:
switch(dir)
if(y > 375)
y = 375;
dir = 1;
break;
case vk_left:
switch(dir)
if(x < 0)
x = 0;
dir = 2;
break;
case vk_right:
switch(dir)
if(x > 575) //640-60
x = 575;
dir = 3;
break;
}break;
case wm_destroy:
int i;
deletedc(mdc);
deletedc(bufdc);
for(i=0;i<4;i++)
deleteobject(girl[i]);
deleteobject(bg);
releasedc(hwnd,hdc);
postquitmessage(0);
break;
default:
return defwindowproc(hwnd, message, wparam, lparam);
}return 0;
}
Visual C 遊戲程式設計基礎之遊戲迴圈
1.函式原型 boolpeekmessage lpmsgipmsg,hwndhwnd,uintwmsgfiltermin,uintwmsgfiltermax,uintwremovemsg 功 能 用於檢測訊息,檢測到了就返回非0值,否則返回0 引數一 接收訊息資訊的msg結構指標 引數二 其訊息被檢...
Visual C 遊戲程式設計基礎之透明動畫
1.利用前面學過的透明處理,這一次相當於是對每一幀進行透明處理,如第一次迴圈對第一幀進行透明處理,接著顯示 第二次對第二幀透明處理,接著顯示,直到最後一幀,然後再從第一幀開始,就這樣無限迴圈 include stdafx.h hinstance hinst hbitmap dra,bg bg為背景圖...
Visual C 遊戲程式設計基礎之搜尋迷宮出口
1.建立8 8迷宮陣列,使用0,1,2,3初始化,0,1,2,3分別表示牆 通道 入口 出口,使用地圖貼圖知識建立迷宮 2.建立堆疊結構記錄走過的方格編號,即走到某個方格就把該方格編號壓入堆疊 若發現路不通,就把該編號出棧,棧頂元素表示 小球所在的方格編號 3.根據迷宮陣列中的值,在初始化函式中對每...