Visual C 遊戲程式設計基礎之鍵盤訊息

2021-09-24 06:16:55 字數 3595 閱讀 2348

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.根據迷宮陣列中的值,在初始化函式中對每...