基于EGE的横板卷轴射击游戏的实现(2)

本文是基于EGE游戏引擎实现横板卷轴射击游戏的第二部分,主要讨论如何实现按键事件检测和处理。通过GetAsyncKeyState()函数而非kbhit()来检测按键状态,解决了只能读取单个按键和卡顿的问题,实现了多按键同时监测,从而提升游戏交互体验。
摘要由CSDN通过智能技术生成

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){
  
  • 42
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值