我想使用 SDL 检查是否按下了某个键。我不工作。也尝试使用事件,但没有触发 SDL_KEYDOWN 事件。Visual C++ 2010 速成版,Windows7。也许我设置了 SDL 或项目错误?我怎么会知道?
SDL_PumpEvents();
Uint8 *keys = SDL_GetKeyState(NULL);
if (keys[SDLK_RIGHT]) {
this->player.xf+=2.0f; // never reached
}
我想使用 SDL 检查是否按下了某个键。我不工作。也尝试使用事件,但没有触发 SDL_KEYDOWN 事件。Visual C++ 2010 速成版,Windows7。也许我设置了 SDL 或项目错误?我怎么会知道?
SDL_PumpEvents();
Uint8 *keys = SDL_GetKeyState(NULL);
if (keys[SDLK_RIGHT]) {
this->player.xf+=2.0f; // never reached
}
如文档 SDL_GetKeyState()
中所述,每个指针只能调用一次。
Uint8 *keys = SDL_GetKeyState(NULL);
分配内存(!)并返回指向数组的指针。该数组在整个程序持续时间内有效,不应被释放。
一旦调用了这个,你就有了指向你的数组的指针,你可以用它来检查键的状态keys[ SDLK_anykey ]
。
如果你想更新你的keys
数组,你只需调用SDL_PumpEvents();
我知道这很旧,但如果它有一个正确的答案,我会因为我犯的同样简单的错误而为我节省几个小时。
SDL_GetKeyState(NULL)
将 const 指针数组返回到SCAN CODES列表
if (keys[SDLK_RIGHT])
在上面的 OP 代码中是KEYCODE。
SDL_SCANCODE_RIGHT = 79
SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT)
//这超出了我的系统范围
Usually SDL_PollEvent
handles pulling the keystate, wich ultimately calls SDL_PumpEvents()
.
It is true that you don't need to create a new pointer every loop itteration but your code should work just fine anyway. You would need to provide some additional details if we are to find the "source" of the problem.