为什么之前的输入按键无法被识别?仅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
相关产品推荐
相关产品推荐

