Mam swój mały projekt, w którym używam SDL, a ja bawiłem się z różnymi dostępnymi sterownikami. Natknąłem się na sterownik aalib i zdałem sobie sprawę, że zdarzenie SDL_KEYUP nigdy nie zostało wywołane.SDL i aalib: brak zdarzenia SDL_KEYUP?
To jednak dzieje się tylko w określonych warunkach. Zdarzenie jest wysyłane podczas używania sterownika X, jednak nie podczas używania w trybie konsoli (np. Za pomocą Ctrl + Alt + F1).
Oto minimalny kod do testowania to:
#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();
}
}
}
Następnie, aby uruchomić go z aalib:
env SDL_VIDEODRIVER=aalib ./a.out
Moje pytanie brzmi: czy ten należy uznać za błąd? A może coś, czego aalib nie może wiedzieć, ponieważ konsola nie poda tych informacji?
Jeśli aalib nie może mieć tych informacji, to szkoda, że SDL nie może dostarczyć tych samych funkcji dla wszystkich swoich sterowników.
OS: FreeBSD 8.2
wersja SDL: 1.2.14
SDL może traktować każdy znak jako cykl w dół/w górę, lub po prostu wygenerować wydarzenie w górę, gdy upłynie czas większy niż najwolniejszy rozsądny przedział częstości powtarzania bez otrzymania tego znaku ponownie ... Coś takiego może spowodować, że aplikacje będą bardziej dostępne nadający się do użytku. –
To może. Ale podejrzewam, że sterownik aalib jest w gruncie rzeczy przeznaczony jako zabawka. – duskwuff