c++ - 键盘输入不适用于 WebAssembly 和 Emscripten
问题描述
我有一些基本的代码可以呈现到 webgl 画布元素。当我调用事件注册方法时,我要么根本没有回调(当我指定画布名称或 #canvas 时,或者当我指定 #document 或 #window 时出现与无法注册空对象相关的错误)
emscripten_set_keydown_callback("#canvas", nullptr, true, Platform::keyCallback);
emscripten_set_keyup_callback("#canvas", nullptr, true, Platform::keyCallback);
我在 html 中的 Canvas 元素是
<canvas id="canvas" oncontextmenu="event.preventDefault()" width="640px" height="480px"></canvas>
我的输入测试方法是..
EM_BOOL Platform::keyCallback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData)
{
printf("TEST\n");
}
注意: printf 确实有效,因为我有其他输出到控制台。
在此先感谢您的帮助
解决方案
原来问题出在 HTML 文件中。我需要在画布中添加“tabindex=-1”。例如:
<canvas id="canvas" oncontextmenu="event.preventDefault()" width="640px" height="480px" tabindex=-1></canvas>
由于此更改,代码现在似乎可以完美运行。
推荐阅读
- ruby-on-rails - 如何使用 RSpec 测试 PUT/PATCH API
- python-3.x - PyCharm 不刷新输入流
- php - 一种形式的两个图像输入
- java - 通过OAuth2,Spring授权后无法获取UserInfo
- python - 下载 Django 表单填充的 HTML 模板页面
- javascript - 如何改进和缩短以下比较两个数组并返回它们之间的对称差异的算法?
- java - Android Java 访问 ROOM 数据库的对象
- r - 如何正确绘制 igraph 的图表以使其具有可比性?
- sql - 将完整的 JSON 解析为 SQL
- c# - 如何让表适配器从数据库中删除行?