模拟键盘按钮按[SDL Library]

时间:2016-03-02 23:31:30

标签: c sdl keyboard-events sdl-2

我正在尝试模拟按下SDL键盘按钮(使用C)。我已经在线查找了SDL信息页面,但我仍然没有任何一贯的工作。

我有以下内容(删除了中断处理,创建了Windows等)。

while(1){
    SDL_Event user_event;
    user_event.type = SDL_SCANCODE_LEFT;

    SDL_PushEvent(&user_event);
    SDL_PumpEvents();

    const Uint8 *state = SDL_GetKeyboardState(NULL);

    if (state[SDL_SCANCODE_LEFT]) {
        printf("LEFT PRESSED");
    }
    if (state[SDL_SCANCODE_RIGHT]) {
        printf("RIGHT PRESSED");
    }
}

我从来没有看到“左压”'字符串打印出来,虽然当我按下右箭头键(从键盘)我看到相应的输出生成。看起来左按键永远不会被推到状态变量

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我不认为它是那样的。 SDL_GetKeyboardState()返回的状态数组表示原始键盘的状态,推送事件不会影响该状态(即使键盘输入生成事件)。

但我认为如果您可以使用SDL_PollEvent()代替SDL_PumpEvents()并检查键盘状态数组,则可以执行您想要的操作,

/* Push a single left key event. */
SDL_Event sdlevent = {};
sdlevent.type = SDL_KEYDOWN;
sdlevent.key.keysym.sym = SDLK_LEFT;
SDL_PushEvent(&sdlevent);

while (1) {
    SDL_Event ev;
    if (SDL_PollEvent(&ev)) {
        if(ev.type == SDL_KEYDOWN) {
            if (ev.key.keysym.sym == SDLK_LEFT) {
                printf("LEFT PRESSED\n");
            }
            if (ev.key.keysym.sym == SDLK_RIGHT) {
                printf("RIGHT PRESSED\n");
            }
        }
    }
}