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