原文地址:

http://dixq.net/rp/3.html

那个叫做 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]++;elsestateKey[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 处理出错的话,返回-1if(ClearDrawScreen()!=0)return -1;         //清理画面出错的话,返回-1GetHitKeyStateAll_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博客目录:

http://blog.csdn.net/tidus5

【四圣龙神录的编程教室】第3章、使用全局变量看看吧相关推荐

  1. 【四圣龙神录的编程教室】

    原文地址: http://dixq.net/rp/ 龙神录的 programming 馆 龙神录的编程教室,是为了让谁都可以制作龙神录(仿东方的STG)的一个解说教学的地方. 这里没有复杂的语句,使用 ...

  2. 【四圣龙神录的编程教室】第24章、来制作boss吧

    原文地址: http://dixq.net/rp/24.html 那么接下来.终于要进入弹幕的制作了. 首先,要制作BOSS的弹幕的话,就需要有个BOSS. BOSS的身体的制作的,要注意很多地方,比 ...

  3. 【四圣龙神录的编程教室】第22章、放炸弹来攻击吧

    原文地址: http://dixq.net/rp/22.html 这次讲炸弹攻击. 和往常一样,准备好信息保存的地方,然后进行加载,然后让他自动计算,大概就是这样的感觉就行了... 在之前的章节里,我 ...

  4. 【四圣龙神录的编程教室】第4章、画个自机形象看看吧

    原文地址: http://dixq.net/rp/4.html 接下来,画个人自机试试吧. 为此,我们首先得定义个结构体,把自机所需的变量都定义好. 自机的结构体,定义成如下这样. --------- ...

  5. 【四圣龙神录的编程教室】第23章、来制作决死炸弹吧

    原文地址: http://dixq.net/rp/23.html 继续讲炸弹制作,这次是讲怎么制作决死炸弹(中弹后立刻按炸弹,来消耗炸弹而自己不死). 这里,我们首先来重温一下,关于角色状态变化的标志 ...

  6. 【四圣龙神录的编程教室】第21章、给自机加上碰撞检测和无敌效果吧

    原文地址: http://dixq.net/rp/21.html 敌机的碰撞检测以及加上了,这次我们来做自机的碰撞检测吧. 首先,在做具体的处理之前,有些准备工作要做. 要做子弹的碰撞检测,我们需要知 ...

  7. 【四圣龙神录的编程教室】第7章、把面板表示出来吧

    原文地址: http://dixq.net/rp/7.html 一直都是自机在左上角这边很不好玩啊,我们把最基本的框架显示出来看看吧. 首先在GV.h 里把存储面板用的画像表示出来吧. ------- ...

  8. 【四圣龙神录的编程教室】第11章、用Excel制作敌人的登场数据吧

    原文地址: http://dixq.net/rp/11.html 道中会有大量的敌人出现. 然后敌人身上带有大量的数据.至少也有下面这些数据吧. --------------------------- ...

  9. 【四圣龙神录的编程教室】第6章、定制一下主循环里的调用函数吧

    原文地址: http://dixq.net/rp/6.html MainLoop里调用的函数,会把当前的各种各样的状态返回,对吧. 也就是说,我们有必要定制一下MainLoop里面调用的函数. 因此, ...

最新文章

  1. C++,那些可爱的小陷阱(一)
  2. 轻量级的网页Rank算法,365Rss.cn的Rank技术解释以及算法讨论(一)
  3. 从《无主之地3》探讨,为什么刷子游戏能让玩家心甘情愿的肝硬化
  4. java bean传索引_Java如何设置bean的索引属性值?
  5. mysql 二叉树表设计_mysql---B+tree索引的设计原理
  6. 孩子学python用什么教材比较好-python大学里用哪本教材比较好?
  7. LeetCode 1577. 数的平方等于两数乘积的方法数(双指针)
  8. 你的ERP系统选对了吗?
  9. 数据库mysql常用操作_mysql数据库常用操作
  10. WordPress精美免费主题分享系列全集
  11. 问题六十九:阴影(Shadow)——原理和C++实现
  12. 免费的思维导图软件都有哪些?
  13. Java毕业设计_智能快递柜的设计与实现
  14. 卸载 Notepad++ !事实已证明,它更牛逼……
  15. Linux Socket接口使用方法
  16. easyrecovery2023免费版电脑数据恢复软件下载功能介绍
  17. 相对免赔额和绝对免赔额是什么意思,有什么区别?
  18. C语言超出类型数值范围的表示方法
  19. 80端口跟8080端口有什么具体区别?
  20. 1077篇 ! ICCV2019论文接收结果公布(附70篇论文链接抢先读,含Oral) 更新中

热门文章

  1. 【紧急警报】微信绑定手机号疑似存在安全漏洞,黑客可通过微信号获取用户手机号!
  2. opencv 去除噪点 java_c++ - OpenCV-去除图像中的噪点 - 堆栈内存溢出
  3. oracle dml是什么,Oracle之DML语句
  4. MySQL自增id不连续问题
  5. js获取富文本内容长度_js富文本实现
  6. asp_php_flash_java,Flash 和 ASP / PHP 以及 Javascript 的交互-ASP教程,ASP应用
  7. 汽车尾灯自动控制系统fpga
  8. JetBrain(Pycharm,Clion...)的使用优化
  9. 【Selenium IDE】菜单栏和工具栏介绍和基本操作:编辑/录制、导出、运行
  10. php move函数,php 文件上传 move_uploaded_file