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

问题描述 投票:2回答:3

我目前正在mingw下交叉编译一个Sprite Engine。因此我有2个问题。

SDL的行为由Emscripten通过WebGL层进行模拟。在使用emcc编译时,我甚至不必链接SDL库。

  1. 问题是: 如果我初恋我的应用程序像这样: if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) == -1)return -1; SDL_Surface *screen= SDL_SetVideoMode(640, 480, 24, SDL_SWSURFACE); SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 255, 0, 0)); SDL_Flip(screen); 然后我无法将文本放入浏览器的文本域,但我得到了SDL_Events。所有其他浏览器输入(如复选框或选择框)都在工作。 如果像这样初始化我的应用程序(Emscripten也可以没有SDL_Init!): SDL_Surface *screen= SDL_SetVideoMode(640, 480, 24, SDL_HWSURFACE); SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 255, 0, 0)); SDL_Flip(screen); 然后我能够将tet放入浏览器文本字段,但我没有得到SDL_Events。 是否有解决方法来使浏览器文本输入字段和SDL_Events有效?
  2. 题 在我的WIN32系统上编译的这行代码将屏幕填充为蓝色 SDL_FillRect(screen,NULL, SDL_MapRGB(screen->format, 255, 0, 0)); 使用Emscripten编译的同一行将屏幕填充为红色。 有没有办法在Emscripten或SDL标题中切换SDL颜色?
sdl emscripten
3个回答
3
投票

默认情况下,Emscripten会将所有用户事件捕获到页面。例如,这对于全屏游戏来说是有意义的。在您的用例中,您可能希望修改Emscripten的SDL_Init以不侦听键事件或更改其receiveEvent返回值。


0
投票

有同样的问题。对我来说,做到这一点修复它:

Module ['doNotCaptureKeyboard'] = true;


0
投票

从您的本机代码,在SDL_CreateWindow调用之前添加:

SDL_SetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT, "#canvas");

更多信息:https://wiki.libsdl.org/SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT

© www.soinside.com 2019 - 2024. All rights reserved.