SDL 多键按下问题
SDL Multiple Key Press Issue
>我在使用 SDL 时遇到了一个问题 - 同时按下 w a s d 和箭头键 - 按住 s、d 和左键以及 w d 和向上和左键时存在某种不兼容。如果我倾向于使用上面提到的组合,似乎只有 3 个键有效,否则,任何其他超过 3 个键的组合都工作得很好。代码如下:事件检查(在类 CEvent 中,调用子函数)
switch(Event->type) {
case SDL_KEYDOWN: {//KEYBOARD_KEYDOWN
onKeyDown(Event->key.keysym.sym,Event->key.keysym.mod,Event->key.keysym.unicode);
break;
}
case SDL_KEYUP: {//KEYBOARD_KEYUP
onKeyUp(Event->key.keysym.sym,Event->key.keysym.mod,Event->key.keysym.unicode);
break;
}
}
这调用了两个函数,从父类(在类核心中,CEvent 的子类)覆盖:
void Core::onKeyDown(SDLKey sym, SDLMod mod, Uint16 unicode) {
switch(sym) {
//pl1
case SDLK_UP: pl1.pmu = true; break;
case SDLK_RIGHT: pl1.pmr = true; break;
case SDLK_DOWN: pl1.pmd = true; break;
case SDLK_LEFT: pl1.pml = true; break;
//pl2
case 'w': pl2.pmu = true; break;
case 'd': pl2.pmr = true; break;
case 's': pl2.pmd = true; break;
case 'a': pl2.pml = true; break;
case SDLK_ESCAPE: onExit(); break;
}
}
void Core::onKeyUp(SDLKey sym, SDLMod mod, Uint16 unicode) {
switch(sym) {
//pl1
case SDLK_UP: pl1.pmu = false; break;
case SDLK_RIGHT: pl1.pmd = false; break;
case SDLK_DOWN: pl1.pml = false; break;
case SDLK_LEFT: pl1.pmr = false; break;
//pl2
case 'w': pl2.pmu = false; break;
case 'd': pl2.pmr = false; break;
case 's': pl2.pmd = false; break;
case 'a': pl2.pml = false; break;
}
}
这是如何称呼的(在类核心中,CEvent 的子级):
while( Running ) {
FPS_START = SDL_GetTicks();
while( SDL_PollEvent( &Eventhn ) ) {
onEvent( &Eventhn );
}
onLoop();
onRender();
regulateFPS();
}
onCleanup();
我只是无法弄清楚是什么原因造成的,因为程序会循环通过它,直到缓冲区中没有剩余的事件。
这可能是这里描述的关键阻塞现象:http://en.wikipedia.org/wiki/Rollover_(key)#Key_blocking_and_ghosting
对此你无能为力。如果您更换键盘,您可能会很幸运地发现一个不同的键组合有问题的键盘(希望是您不使用的键盘)。
相关文章:
- 在 JS 中通过 Emscripten 获取 SDL 代码C++时遇到问题
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- 我在链接 SDL 库时遇到问题
- (SDL 渲染问题)C++ 引发异常:读取访问冲突.这是无效的
- 切换音频设备时播放声音的SDL问题
- 奇怪的SDL键盘问题
- SDL 多键按下问题
- 在Visual Studio 2013下编译SDL 2.0.0/2.0.1源代码时出现问题
- 使用GLEW 1.10.0和SDL 2.0时出现问题
- 使用g++编译SDL的问题
- C++ - SDL:解决性能问题
- SDL fscanf 函数问题
- SDL 2.0 将问题与 Sublime Text 2 和 MinGW 联系起来
- SDL - C++ 中 LoopTimer 的 FPS 问题
- 一些SDL链接问题
- Project1.exe已停止工作.我似乎找不到我的SDL代码到底出了什么问题
- SDL 2.03和VS 2015出现问题
- 在 SDL 中,当我在屏幕上绘制菜单时,它会使游戏变慢并且无法正常工作,我该如何解决这个问题?
- SDL OpenGL渲染问题
- C++/SDL/OpenGL中的平滑动画问题