如何在 Emscripten + SDL 中禁用窗口事件捕获?

Posted

技术标签:

【中文标题】如何在 Emscripten + SDL 中禁用窗口事件捕获?【英文标题】:How to disable window event capturing in Emscripten + SDL? 【发布时间】:2017-07-30 12:19:27 【问题描述】:

对于我的用例,我不需要通过键盘或鼠标在用户和 emscripten 代码之间进行任何交互,我只需要访问画布。

我注意到,每当我调用使用 emscript 编译的代码时,Chrome 都会在控制台上显示许多警告,例如

Added non-passive event listener to a scroll-blocking 'touchstart' event. Consider marking event handler as 'passive' to make the page more responsive.

由于我不需要任何用户交互,我想禁用这些事件以提高性能并避免分配不需要的对象。

我已经将doNotCaptureKeyboard 设置为 true,有没有办法指示 emscripten 完全忽略所有输入的 DOM 事件?

【问题讨论】:

【参考方案1】:

这没有经过很好的测试,但它似乎工作:

<script>
    SDL.receiveEvent = function(event) 
</script>

您可以从 SDL 覆盖主事件函数。只需确保 SDL 已加载或将代码放在结束 body 标记之前。

请记住,您禁用了整个事件处理,这可能会导致问题。如果遇到问题,可以尝试重命名函数并传递一些您需要的事件。

【讨论】:

以上是关于如何在 Emscripten + SDL 中禁用窗口事件捕获?的主要内容,如果未能解决你的问题,请参考以下文章

Emscripten SDL 编译失败

带有 SDL 音频的 Emscripten 工作模型

在 Edge 和 Safari (emscripten) 中使用 SDL_mixer 播放 .ogg 文件

将 SDL2 RenderDraw 函数与 Emscripten 一起使用

Emscripten 调用 SDL_Init 冻结浏览器文本输入

emscripten + sdl = 抛出异常:TypeError:无法设置未定义的属性“widthNative”