我有一个小项目,我使用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 并不是真正的罪魁祸首。