c - SDL 和 aalib : No SDL_KEYUP event?

标签 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();
        }
    }
}

然后,使用 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/

相关文章:

c - 为什么这个字符串函数的最后一个字符是 "?"

c - 如何在 Sublime Text 2 中运行一个 c 程序?

c - 从文件中读取文本但显示不正确

c++ - 不进入控制台应用程序的 Windows GetMessage 循环

c# - 写方法时如何防止某些形式的输入?

git - 暂存 git 文件名的智能自动完成,与 difftool 一起使用

mingw - SDL 1.3/2.0 设置

C fopen/fwrite 让我发疯 - fwrite 不写

c++ - 如何在3D OpenGL场景上绘制SDL 2D矩形?

c++ - 我可以在同一个游戏中使用 Mix_OpenAudio 和 SDL_OpenAudio 吗?