Ho il mio piccolo progetto in cui utilizzo SDL e ho giocato con i diversi driver disponibili. Mi sono imbattuto nel driver aalib e mi sono reso conto che l'evento SDL_KEYUP non è mai stato chiamato.SDL e aalib: nessun evento SDL_KEYUP?
Questo, tuttavia, si verifica solo in determinate condizioni. L'evento viene inviato quando si utilizza il driver X, tuttavia non quando si utilizza in modalità console (ad esempio utilizzando Ctrl + Alt + F1).
Ecco un codice minimo per testare questo:
#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();
}
}
}
Poi, per eseguirlo con aalib:
env SDL_VIDEODRIVER=aalib ./a.out
La mia domanda è: È questo per essere considerato un bug? O è qualcosa che aalib non può sapere perché la console non darà queste informazioni?
Se aalib non può avere questa informazione, trovo un peccato che SDL non possa fornire le stesse funzionalità per tutti i suoi driver.
OS: FreeBSD 8.2
versione SDL: 1.2.14
SDL potrebbe trattare ciascun carattere come un ciclo di down/up, o semplicemente generare un evento up una volta che un intervallo maggiore dell'intervallo di frequenza ripetitiva ragionevole più lento passa senza aver ricevuto di nuovo quel carattere ... Qualcosa di simile potrebbe rendere le app più utilizzabile. –
Potrebbe. Ma sospetto che il driver aalib sia inteso principalmente come un giocattolo, comunque. – duskwuff