学生(ID-3CBB47):
老师:本例如果第二个玩家用W,A,S,D操作,该怎么写,书中提到的字母键码名称“VK_W”"VK_A"好像用不了啊。
吴老师:
这些常量,都是在WinUser.h头文件里定义的,右击VK_UP-->转到定义,就可以打开这个头文件。
头文件里有一些关于VK_A - VK_Z的说明,
#define VK_LEFT 0x25
#define VK_UP 0x26
#define VK_RIGHT 0x27
#define VK_DOWN 0x28
#define VK_SELECT 0x29
#define VK_PRINT 0x2A
#define VK_EXECUTE 0x2B
#define VK_SNAPSHOT 0x2C
#define VK_INSERT 0x2D
#define VK_DELETE 0x2E
#define VK_HELP 0x2F
/*
* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
* 0x40 : unassigned
* VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
*/
微软说,现在不写VK_A,VK_B这些了,直接写'A','B'等等,你把游戏改成下面的代码,第二个玩家就可以玩了。
#define VK_LWIN 0x5B
void HandleKeys()
{
if(!g_bGameOver)
{
if(GetAsyncKeyState(VK_UP)<0)
SteerCycle(0,0);
else if(GetAsyncKeyState(VK_RIGHT)<0)
SteerCycle(0,1);
else if(GetAsyncKeyState(VK_DOWN)<0)
SteerCycle(0,2);
else if(GetAsyncKeyState(VK_LEFT)<0)
SteerCycle(0,3);
else if(GetAsyncKeyState('A')<0)
SteerCycle(1,3);
else if(GetAsyncKeyState('D')<0)
SteerCycle(1,1);
else if(GetAsyncKeyState('W')<0)
SteerCycle(1,0);
else if(GetAsyncKeyState('S')<0)
SteerCycle(1,2);
}else if(GetAsyncKeyState(VK_RETURN)<0)
NewGame();
}
祝学习进步!