C 模拟键盘按钮按下[SDL库]

C 模拟键盘按钮按下[SDL库],c,sdl,keyboard-events,sdl-2,C,Sdl,Keyboard Events,Sdl 2,我正在尝试模拟SDL键盘按键(使用C)。我已经在网上查询了SDL信息页面,但是我仍然没有任何可以持续工作的东西 我有以下内容(删除了中断处理、创建窗口等) 我从未看到“左按”字符串打印出来,尽管当我按下右箭头键(从键盘)时,我看到生成的相应输出。似乎从未按下状态变量上的左键 任何帮助都将不胜感激。我认为它不是那样工作的。SDL\u GetKeyboardState()返回的状态数组表示原始键盘的状态,按下事件不会影响该状态(即使键盘输入生成事件) 但我认为,如果您可以使用SDL\u PollEv

我正在尝试模拟SDL键盘按键(使用C)。我已经在网上查询了SDL信息页面,但是我仍然没有任何可以持续工作的东西

我有以下内容(删除了中断处理、创建窗口等)

我从未看到“左按”字符串打印出来,尽管当我按下右箭头键(从键盘)时,我看到生成的相应输出。似乎从未按下状态变量上的左键


任何帮助都将不胜感激。

我认为它不是那样工作的。
SDL\u GetKeyboardState()
返回的状态数组表示原始键盘的状态,按下事件不会影响该状态(即使键盘输入生成事件)

但我认为,如果您可以使用
SDL\u PollEvent()
而不是
SDL\u 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");
            }
        }
    }
}

可能你没有英文键盘,你的扫描码也不一样。尝试
SDL\u GetScancodeFromKey()
从keycodes获取扫描代码。参考:事件类型肯定不正确,但无论如何-显式声明
注意:将设备输入事件推送到队列不会修改SDL中设备的状态。
/* 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");
            }
        }
    }
}