Tengo mi pequeño proyecto en el que uso SDL, y estaba jugando con los diferentes controladores disponibles. Encontré el controlador aalib, y me di cuenta de que el evento SDL_KEYUP nunca se llamó.SDL y aalib: ¿Ningún evento SDL_KEYUP?
Esto, sin embargo, ocurre solo en ciertas condiciones. El evento se envía cuando se utiliza el controlador X, pero no cuando se usa en modo consola (es decir, usando Ctrl + Alt + F1).
Aquí es un código mínimo para probar esto:
#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();
}
}
}
Luego, a ejecutarlo con aalib:
env SDL_VIDEODRIVER=aalib ./a.out
Mi pregunta es: ¿Es que esto se considera un error? ¿O es algo que aalib no puede saber debido a que la consola no brindará esta información?
Si aalib no puede tener esta información, me parece una pena que SDL no pueda ofrecer las mismas características para todos sus controladores.
OS: FreeBSD 8.2
versión SDL: 1.2.14
SDL podría tratar a cada personaje como un ciclo descendente/ascendente, o simplemente generar un evento ascendente una vez que pasa un intervalo mayor que el intervalo más lento de repetición razonable sin haber recibido ese carácter nuevamente ... Algo como esto podría hacer que las aplicaciones sean más usable. –
Podría. Pero sospecho que el controlador aalib se entiende principalmente como un juguete, de todos modos. – duskwuff