2011-09-23 3 views
6

SDL을 사용하는 작은 프로젝트가 있는데 다른 드라이버를 가지고 놀고있었습니다. 나는 aalib 드라이버를 발견했으며, SDL_KEYUP 이벤트가 호출되지 않는다는 것을 깨달았습니다.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이 모든 드라이버에 대해 동일한 기능을 제공 할 수 없다는 사실을 알고 있습니다.

OS : FreeBSD의 8.2

SDL 버전 : 1.2.14

답변

4
모든 원시 키보드 이벤트를 수신하지 않습니다 (예 : 콘솔 등)

TTY에; 그들은 오직 하나의 "문자 입력"이벤트만을받습니다. 수정 자 키 (예 : 교대)는 전송 된 해당 문자가 없기 때문에 SDL 이벤트를 전혀 발생시키지 않을 수 있습니다.

이것은 TTY 계층의 고유 한 제한 사항입니다. SDL은 실제로 탓할 필요가 없습니다.

+0

SDL은 각 캐릭터를 다운/업 사이클로 처리하거나, 가장 느린 합리적인 반복 속도 간격보다 큰 간격이 다시 해당 캐릭터를 수신하지 않고 지나면 간단히 업 이벤트를 생성 할 수 있습니다. 쓸 수 있는. –

+0

그럴 수도 있습니다. 그러나 나는 어쨌든 aalib 운전자가 주로 장난감으로서의 의미가 있다고 의심한다. – duskwuff