You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pixel Game Engine中检测任意按键是否按下

检测任意按键按下的Pixel Game Engine实现方案

嘿,刚好我对Pixel Game Engine(PGE)的输入系统比较熟悉,这就给你解决这个问题!

你已经知道如何检测单个按键了,要实现任意按键按下的检测,核心思路是遍历PGE提供的所有按键枚举值,逐个检查状态就行。PGE把所有按键都定义在olc::Key枚举里,配合它的GetKey()和GetKeyName()函数,就能完美实现你的需求。

具体实现步骤

  • 遍历所有按键枚举:把olc::Key枚举转换成整数范围,循环遍历每一个可能的按键值。
  • 检查按键按下状态:对每个按键,用GetKey(k).bPressed判断是否是刚刚被按下(单次触发,不会重复触发直到松开再按)。如果需要检测持续按住的状态,可以换成bHeld。
  • 获取并输出按键名称:用olc::GetKeyName(k)直接把按键枚举转换成对应的字符串(比如olc::A会变成"A"),省去自己手动映射的麻烦。

完整代码示例

把这段代码放到你的PGE游戏类的OnUserUpdate方法里就行:

bool OnUserUpdate(float fElapsedTime) override
{
    // 遍历所有按键(覆盖字母、数字、功能键、方向键等所有类型)
    for (int keyCode = static_cast<int>(olc::Key::UNKNOWN); keyCode <= static_cast<int>(olc::Key::LAST_KEY); ++keyCode)
    {
        olc::Key currentKey = static_cast<olc::Key>(keyCode);
        auto keyState = GetKey(currentKey);
        
        // 检测按键是否刚被按下
        if (keyState.bPressed)
        {
            // 输出按下的按键名称
            std::cout << "The key which was pressed was " << olc::GetKeyName(currentKey) << std::endl;
        }
    }

    return true;
}

补充说明

  • 如果只需要检测字母/数字键,可以缩小遍历范围,比如只遍历olc::A到olc::Z、olc::K0到olc::K9,这样循环效率更高。
  • olc::HWButton结构体里的bReleased还可以检测按键松开的状态,按需使用。
  • 这个方案完全是PGE专属的,没有依赖外部工具,所有函数都是引擎自带的,刚好符合你的需求。

内容的提问来源于stack exchange,提问作者user12291970

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:37:49