3
我正在用C語言編寫一個利用SDL 2.0的小程序,並且在我無法獲得SDL_NumJoysticks()
報告函數調用時插入的遊戲杆數量時遇到了問題。我相信它報告的是在SDL的一個初始化函數中連接的遊戲杆的數量(我猜'SDL_Init()',但我沒有證據),然後在整個程序的其餘部分繼續給你這個數字。這裏是我一直在用一個短的測試程序:爲什麼SDL_NumJoysticks()永遠不會更新?
#include <stdio.h>
#include <SDL2/SDL.h>
int main() {
SDL_Event event;
SDL_Window *window;
short joysticks = 0;
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) {
fprintf(stderr, "SDL_Init error: %s\n", SDL_GetError());
return 1;
}
window = SDL_CreateWindow("Test window", 0, 0, 800, 600, SDL_WINDOW_SHOWN);
if (window == NULL) {
fprintf(stderr, "SDL_CreateWindow error: %s\n", SDL_GetError());
return 1;
}
printf("%s\n", SDL_GetError());
while (1) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
printf("%s\n", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
} else if (event.type == SDL_JOYDEVICEADDED) {
printf("Joystick added!\n");
} else if (event.type == SDL_JOYDEVICEREMOVED) {
printf("Joystick removed!\n");
}
}
if (SDL_NumJoysticks() > joysticks) {
printf("Joystick inserted.\n");
joysticks++;
} else if (SDL_NumJoysticks() < joysticks && SDL_NumJoysticks() >= 0) {
printf("Joystick removed.\n");
joysticks--;
} else if (SDL_NumJoysticks() < 0) {
printf("Something went wrong!\n");
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
}
return 0;
}
程序準確地報告程序啓動時插上操縱桿的數量,但在那之後絕對什麼都不做。
SDL_Numjoysticks()的official SDL docs指出它「返回成功時連接的遊戲杆的數量」。我怎樣才能告訴我在函數調用時插入的遊戲杆數量?我在代碼中犯了錯誤,還是僅僅是不是SDL_NumJoysticks()
的工作方式?
你在哪個操作系統上運行? – Charlie
@Charlie,來自存儲庫的32位Lubuntu 13.10庫存SDL 2.0。 – fouric
我在OSX上遇到了類似的問題(如果不完全一樣)。我看到它的方式應該像在Windows上一樣工作,如果沒有,應該記錄差異。官方SDL BB上的這個主題涉及了一些細節,但似乎並沒有真正說明情況 - http://forums.libsdl.org/viewtopic.php?t=9592&sid=f1468617007f482a33de58d62234405f - 如果您發現更多細節,請回到這裏! – Charlie