我有一些基本的代码可以渲染到webgl canvas元素。当我调用事件注册方法时,我要么根本无法获得回调(当我如下指定画布名称或#canvas时,或者当我指定#document或#window与无法注册空对象有关时,chrome中出现错误)
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确实可以正常工作,因为我还有其他输出到控制台。
预先感谢您的帮助
答案 0 :(得分:0)
原来问题出在HTML文件中。我需要在画布上添加“ tabindex = -1”。例如:
<canvas id="canvas" oncontextmenu="event.preventDefault()" width="640px" height="480px" tabindex=-1></canvas>
由于此更改,代码现在似乎可以正常工作。
答案 1 :(得分:0)
仅添加一个答案,因为我发现'tabindex = -1'还不够,需要使canvas对象聚焦。
我通过添加类似于以下内容的代码实现了这一点:
addOnPostRun(function()
{
var canvas = document.getElementById('my_canvas');
if (canvas)
canvas.focus();
});
使用emcc构建时,在'--post-js ./your_postfix_file.js'中指定的后缀代码。