我想使用SDL检查是否按下了某个键。 我不工作。还尝试使用事件但是没有触发SDL_KEYDOWN事件。 Visual C ++ 2010 Express,Windows7。 也许我已经设置了SDL或项目错了?我怎么会知道?
SDL_PumpEvents();
Uint8 *keys = SDL_GetKeyState(NULL);
if (keys[SDLK_RIGHT]) {
this->player.xf+=2.0f; // never reached
}
答案 0 :(得分:4)
如documentation SDL_GetKeyState()
中所述,每个指针只能调用一次。
Uint8 *keys = SDL_GetKeyState(NULL);
分配内存(!)并返回指向数组的指针。此数组对整个程序持续时间有效,不应释放。
调用此方法后,您将拥有指向数组的指针,您可以使用它来检查具有keys[ SDLK_anykey ]
的键的状态。
如果您想更新keys
数组,只需致电SDL_PumpEvents();
答案 1 :(得分:1)
我知道这已经过时了,但是如果它有正确的答案会因为我犯了同样的简单错误而节省了一些时间。
SDL_GetKeyState(NULL)
将一个const指针数组返回到 SCAN CODES
if (keys[SDLK_RIGHT])
是 KEYCODE 。
SDL_SCANCODE_RIGHT = 79
SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT)
//我的系统超出范围
答案 2 :(得分:0)
通常SDL_PollEvent
处理拉动关键状态,最终会调用SDL_PumpEvents()
。
确实,您不需要在每个循环迭代中创建一个新指针,但无论如何您的代码应该可以正常工作。如果我们要找到问题的“来源”,您需要提供一些额外的细节。