game-engine - Xlib XEventQueue 并不总是包含所有事件
问题描述
希望这不是一个错误,只是我对 Xinput 应该如何工作的误解。
我一直在写游戏,我正在使用 Xlib 从键盘获取输入。奇怪的是,一些 KeyRelease 事件似乎无限期地卡在 XServer 中,直到另一个事件发生并将该事件推送到队列中。
如果我一次混合 3 个按钮(向左、向上和向右箭头),我可以做到这一点。具有讽刺意味的是,我只能使用向左箭头键来实现它。但我已经在不同的机器上复制了它。
我曾经XPending()
检查过事件队列,以及XCheckMaskEvent()
他们俩,似乎认为队列是空的。但可以肯定的是,当我按下另一个键(例如right
KeyRelease 事件)时,left
恰好同时发生。
这是一个错误吗?还是预期的功能?
- 旁注,知道我在根窗口上抓住键盘可能很有用
这是实际的代码
loop do
Fiber.yield
next if (event = display.check_mask_event(KeyPressMask | KeyReleaseMask)).nil?
case event
when KeyEvent
kcode = event.lookup_keysym event.state & ShiftMask ? 1 : 0
return {event.type, kcode}
else
next
end
end
解决方案
推荐阅读
- php - 如何以最简单的方式将键和值添加到数组
- python - keras - tensorflow - LSTM - csv - 如何使用 fit_generator
- asp.net - 从网站转换为 Web 应用程序后,Syste.Web.Ui.Page 为“未定义”
- python - `mp.pool` 正常工作时`mp.pool.ThreadPool` 失败
- javascript - React-Router V2, V4 - 如何在 react-router V4 中使用 react-router V2 的“路由器”?
- typescript - 量角器 + 茉莉花 + TS。打字问题:xit 返回无效。如何使用 xit().pend(原因)
- vba - 选择现有形状时出现错误 86db089e
- java - 如何在java中获取表情符号代码?
- reactjs - 道具类型在反应应用程序中不起作用
- android - Android - DreamService 中的 setRequestedOrientation