我尝试在 SDL-2.0 代码中使用
SDL_JoystickOpened()
,但收到错误消息 SDL_JoystickOpened
未在此范围内声明。
我搜索了一下,发现SDL-2.0中不再存在
SDL_JoystickOpened()
,但是我没有找到替代它的函数。谁能告诉我如何替换这段代码中的SDL_JoystickOpened()
:
SDL_Joystick *joy = SDL_JoystickOpen(0);
if (SDL_JoystickOpened(0) == 1)
{
// do something
}
谢谢。
文档说
SDL_JoystickOpen()
调用如果失败则返回一个NULL指针,所以只需检查一下:
SDL_Joystick *joy = SDL_JoystickOpen(0);
if (joy) {
// joy is a valid pointer so do stuff
}
2.0 中的替代方案可能是
SDL_JoystickGetAttached
SDL_JoystickOpened(int index)
(旧方法 SDL 1.2)
确定应用程序中是否已打开操纵杆。 index 指的是系统上的第 N 个摇杆。
SDL_JoystickGetAttached(SDL_Joystick* joystick)
(新方式SDL 2.0)
摇杆已打开则返回SDL_TRUE,未打开则返回SDL_FALSE;致电 SDL_GetError() 了解更多信息
test/testjoystick.c
中还有一个SDL2源代码的示例(至少在SDL2-2.0.1中).
另请注意SDL 1.2 到 2.0 迁移指南的操纵杆部分。它提供了有关 2.0 中新功能和新方式的各种信息。它还链接到 GameController 部分,例如SDL_GameControllerGetJoystick。
我知道这个问题迟到了 10 年,但今天我发现自己需要一个相当于
SDL_JoystickOpened()
的 SDL2,就我而言,我确实需要检查给定的操纵杆是否已经打开(即我需要避免为给定的操纵杆多次调用 SDL_JoystickOpen()
)。
SDL2 文档中没有很好地解释,但是如果您查看源代码,如果尚未打开具有给定实例 id 的操纵杆,则函数
SDL_JoystickFromInstanceID()
返回 NULL,否则返回操纵杆指针。您可以使用SDL_JoystickGetDeviceInstanceID()
获取操纵杆的instance_id,无论它是否打开。通过使用这两个函数,您可以在 SDL2 中获得SDL_JoystickOpened()
行为。