2.0 前言
上一篇文章中我们借助 while 循环以及 Sleep() 函数实现了简单的 GameLoop,成功实现了逐帧绘图的设计,不过距离一个能叫做“游戏”的程序而言还差了关键的一步,就是交互。
所谓“交互”,简单来说就是我给了程序一个输入,程序给我一个输出,这个“输出”并不一定是一个数,也有可能是一个值的变动、屏幕上一个元素位置的变化。在我们的游戏中,需要实现的交互就是:玩家按下了按键,后台程序识别到这个按键,做出相应的处理,然后再以图形化的方式呈现出来。
2.1 按键事件
2.1.1 按键检测
为了实现这个交互,首先要做到的就是要让我们的程序知道“用户按键了某个按键”这件事情发生了,换句话说,程序需要检测到按键被触发。我们一般所使用的 std::cin 肯定是不可以的,因为标准输入流在没有得到输入时会产生阻塞,实际游戏内玩家不必一直按下某个按键,所以我们需要一种非阻塞的输入方式。
在寻找方法时,看到最多的是 conio.h 头文件内的 kbhit() 函数,在 C++ 的编译环境中需要写成 _kbhit(),这个函数无需参数,返回一个布尔值,当有按键按下时返回真,否则返回假。这个函数并不能得知按下的按键具体是哪一个,所以一般需要配合 getch() 函数来使用:
//https://www.runoob.com/w3cnote/c-get-keycode.html
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
int ch;
while (1){