SDL和aalib:没有SDL_KEYUP事件?

wor*_*rty 6 c console sdl

我有一个小项目,我使用SDL,我正在玩不同的可用驱动程序.我遇到了aalib驱动程序,我意识到从未调用过SDL_KEYUP事件.

然而,这仅在某些条件下发生.使用X驱动程序时会发送事件,但在控制台模式下使用时则不会发送(即使用Ctrl + Alt + F1).

这是一个测试这个的最小代码:

#include <SDL/SDL.h>
#include <stdio.h>

int main()
{
    SDL_Init(0);
    SDL_SetVideoMode(64, 64, 32, SDL_SWSURFACE);

    while(1)
    {
        SDL_Event event;

        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_KEYDOWN)
                printf("Key down: %d\n", event.key.keysym.sym);
            else if(event.type == SDL_KEYUP)
                printf("Key up: %d\n", event.key.keysym.sym);
            else if(event.type == SDL_QUIT)
                SDL_Quit();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,用aalib运行它:

env SDL_VIDEODRIVER=aalib ./a.out
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是否被视为一个错误?或者它是aalib无法知道的,因为控制台不会提供这些信息?

如果aalib无法获得这些信息,我觉得很遗憾SDL无法为其所有驱动程序提供相同的功能.

操作系统:FreeBSD 8.2

SDL版本:1.2.14

小智 4

TTY(例如控制台)根本不接收原始键盘事件;他们只收到一个“字符输入”事件。您可能会发现修饰键(例如,shift)根本不会触发 SDL 事件,因为没有发送相应的字符。

这是 TTY 层的固有限制。SDL 并不是真正的罪魁祸首。