原文地址:
那个叫做 GetHitKeyStateAll_2 的按键输入处理函数 ,从刚刚的示例代码里,复制到这里来了。
像刚刚那样,key的处理函数必须是全局函数,
但全局变量在哪里都可能被修改,所以尽量少用比较好。
虽然还是用了全局变量,让我们来试试尽量减少bug发生率的方法。
————————————————————————————————————————————————————————————
-- key.cpp的改动 --
#include "../include/GV.h"
unsigned int stateKey[256];
int GetHitKeyStateAll_2(){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1)
stateKey[i]++;
else
stateKey[i]=0;
}
return 0;
}
int CheckStateKey(unsigned char Handle){
return stateKey[Handle];
}
———————————————————————————————————————————————————————————————
像上面这样,main 文件 和 key 文件分开写。
现在,我们需要调用 ESC 键按下的状态 Key[KEY_INPUT_ESCAPE]
但是 ,有这个Key 的 stateKey 为了不让其他地方直接访问到,用 CheckStateKey 函数来返回 那个键的序号。
这样,Key 的值被不小心修改的可能性就降低了。
现在,就用上面的封装了的 CheckStateKey 函数来传递Key的序号,来检查一下 Key 的输入状态吧。
另外,其他的文件如果要访问封装的变量或者函数,需要加上 extern 来声明。
// 现在 处理 按键输入
extern int GetHitKeyStateAll_2();
// 返回 接收到的 Key 的序号的输入状态
extern int CheckStateKey(unsigned char Handle);
现在,可以在main.cpp用这种写法,在main 文件内访问key文件内定义的函数了。
除此之外,上一节写的 MainLoop 每次都会写到的,就把它整理到一个 叫ProcessLoop 的函数里面去了。
这不会改变程序的运行。恩,我们来看看修改后的main 文件吧。
————————————————————————————————————————————————————————————————
--main.cpp的改动---
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//对现在的按键输入进行处理
extern int GetHitKeyStateAll_2();
//根据收到的键的序号,返回现在的输入状态
extern int CheckStateKey(unsigned char Handle);
//主循环里,一定要进行的三大处理
int ProcessLoop(){
if(ProcessMessage()!=0)
return -1; //Process 处理出错的话,返回-1
if(ClearDrawScreen()!=0)
return -1; //清理画面出错的话,返回-1
GetHitKeyStateAll_2(); //对现在的按键输入进行处理
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//窗口模式
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0)
return -1; //初始化和设置双缓冲
while(ProcessLoop()==0){ //主循环
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)
break; //输入ESC的话,退出主循环
ScreenFlip();//交换双缓冲画面
}
DxLib_End();//DxLib终止
return 0;
}
————————————————————————————————————————————————————————————
按下ESC就退出的话,就完成了。
本人CSDN博客目录: