2011-09-23 14 views
6

SDL'yi kullandığım küçük projem var ve farklı kullanılabilir sürücülerle uğraşıyordum. Aalib sürücüsüne rastladım ve SDL_KEYUP olayının hiç çağrılmadığını fark ettim. Bununla birlikte, bu, yalnızca belirli durumlarda gerçekleşir. Olay X sürücüsü kullanıldığında gönderilir, ancak konsol modunda kullanıldığında (örn. Ctrl + Alt + F1 kullanılarak).SDL ve aalib: SDL_KEYUP olayı yok mu?

#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 ile çalıştırmak için, Sonra:

env SDL_VIDEODRIVER=aalib ./a.out 

Sorum gelir: Bu bir hata olarak mı değerlendirilir

İşte bu test etmek için bir asgari koddur? Ya da aalib'in bu bilgiyi vermeyeceği için bir şey bilemez mi?

Eğer aalib bu bilgiyi alamıyorsa, SDL'nin tüm sürücüleri için aynı özellikleri sağlayamayacağına inanıyorum.

OS: FreeBSD 8.2

SDL sürümü: 1.2.14

cevap

4
hiç işlenmemiş klavye olaylarını almayan (örneğin konsolu gibi)

ttys; Sadece tek bir "karakter girişi" etkinliği alırlar. Değiştirici tuşların (ör. Kayma) SDL olaylarını hiç tetiklemediğini, çünkü ilgili karakterin gönderilmediğini görebilirsiniz.

Bu, TTY katmanının içsel bir sınırlamasıdır. SDL gerçekten sorumlu değil.

+0

SDL, her karakteri aşağı/yukarı döngüsü olarak ele alabilir veya yalnızca bu karakteri almadan en düşük makul tekrarlama aralığı aralığından daha büyük bir aralık geçtikten sonra bir up olayı oluşturabilir ... Buna benzer bir şey, uygulamaları daha fazla hale getirebilir kullanılabilir. –

+0

Belki olabilir. Ama aalib sürücüsünün esas olarak bir oyuncak olduğu kanaatindeyim. – duskwuff