作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个使用 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/
我是一名优秀的程序员,十分优秀!