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

为什么之前的输入按键无法被识别?仅isKeyHeld方法可正常运行

核心问题

你代码的问题出在beginNewFrame方法的引用赋值逻辑,导致上一帧的按键状态被意外清空丢失:

  • C#中HashSet是引用类型,你执行previous_held_heys_ = held_heys_;时,并没有复制上一帧的按键集合内容,只是让previous_held_heys_和held_heys_指向了内存里同一个集合对象
  • 后续你调用held_heys_.Clear();时,两个变量指向的同一个集合被清空,previous_held_heys_里也没有上一帧的任何状态了,所以依赖上一帧状态的wasKeyPressed、wasKeyReleased方法全部失效,只有判断当前帧状态的isKeyHeld可以正常运行

修复方案

修改beginNewFrame方法,将上一帧的集合内容复制到previous_held_heys_中,而非直接赋值引用:

public void beginNewFrame() {
    // 替换直接赋值为内容拷贝
    previous_held_heys_.Clear();
    foreach (var key in held_heys_)
    {
        previous_held_heys_.Add(key);
    }
    // 也可以简化为一行写法:previous_held_heys_ = new HashSet<Keys>(held_heys_);
    held_heys_.Clear();
}

额外提示:你定义的变量名拼写有误,held_heys_、previous_held_heys_里的heys应为keys,避免后续维护出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:03