2011-09-23 10 views
6

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

risposta

4

TTY (come la console) non ricevono gli eventi di tastiera prime affatto; ricevono solo un singolo evento di "inserimento di caratteri". Potresti scoprire che i tasti modificatori (ad esempio, shift) non generano affatto eventi SDL, perché non è stato inviato alcun carattere corrispondente.

Questa è una limitazione intrinseca del livello TTY. SDL non è davvero la colpa.

+0

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. –

+0

Potrebbe. Ma sospetto che il driver aalib sia inteso principalmente come un giocattolo, comunque. – duskwuff

Problemi correlati