我有一个使用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();
        }
    }
}

然后,使用aalib运行它:
env SDL_VIDEODRIVER=aalib ./a.out

我的问题是:这被认为是错误吗?还是由于控制台无法提供此信息而aalib无法知道?

如果aalib无法获得此信息,我会发现它很可惜SDL无法为其所有驱动程序提供相同的功能。

操作系统:FreeBSD 8.2

SDL版本:1.2.14

最佳答案

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

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

关于c - SDL和aalib : No SDL_KEYUP event?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7535269/

10-11 21:27