2011-02-03 17 views
6

Tôi đã mất một thời gian cố gắng để nhận được hỗ trợ phím điều khiển cho một ứng dụng của tôi sử dụng SDL, chủ yếu là bởi vì các bước khởi tạo nơi này:Sử dụng SDL_INIT_JOYSTICK mà không SDL_INIT_VIDEO

SDL_Init(SDL_INIT_JOYSTICK|SDL_INIT_VIDEO); 
SDL_JoystickEventState(SDL_ENABLE); 

Nó không làm việc nếu tôi chỉ khởi sự cần điều khiển, nó cần phải được thực hiện cùng với video. Tôi muốn điều này là rất tối giản, vì vậy nó sẽ được tốt đẹp để biết nếu có một cách để khởi tạo chỉ cần phím điều khiển. Nếu không, ai đó có thể cho tôi biết nếu có bất kỳ bất lợi của việc khởi tạo video và không bao giờ sử dụng nó?

Tôi đang sử dụng Ubuntu ở đây, nhưng tôi hy vọng điều này sẽ chạy trên nhiều nền tảng khác nhau. Hành vi này có thay đổi trong các môi trường khác nhau không?

Cảm ơn :)

Trả lời

7

Tôi gặp phải sự cố tương tự khi phát triển một ứng dụng CLI nhỏ dùng đầu vào joypad. Về cơ bản, nó không hoạt động nếu không có SDL_INIT_VIDEO vì hệ thống sự kiện SDLs xuất phát từ trình điều khiển video, ít nhất là trên Linux (X11).

Hoàn toàn tốt để bắt đầu video mà không bao giờ tạo cửa sổ (nó hoạt động ít nhất). Tôi đã thử nghiệm phương pháp này trên cả Win32 và Linux, do đó, nó dường như làm việc tốt nhiều nền tảng là tốt.

+0

Tôi đang thử tính năng này trên windows7 và có vẻ như điều này không đúng. Tắt SDL_CreateWindow làm cho vòng lặp sự kiện bị kích hoạt bởi các nút nhưng không phải là các gậy analog trên Gamepad Logitech. Với cửa sổ tạo ra nó hoạt động tốt. – user505160

3

Tôi gặp sự cố tương tự, tôi đã giải quyết vấn đề này bằng cách không sử dụng vòng lặp sự kiện. Thay vào đó, tôi tự cập nhật cần điều khiển và sau đó sử dụng các chức năng SDL để kiểm tra cần điều khiển.

SDL_Init(SDL_INIT_JOYSTICK); 
SDL_JoystickEventState(SDL_DISABLE); 
joystick = SDL_JoystickOpen(0); 
SDL_Joystick* joystick; 
while(true) 
{ 
    SDL_JoystickUpdate(); 
    SDL_JoystickGetAxis(joystick, 0); 
} 
Các vấn đề liên quan