‘SDL_JoystickOpened’在SDL-2.0中对应的函数是什么?

问题描述 投票:0回答:3

我尝试在 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 sdl-2
3个回答
6
投票

文档

SDL_JoystickOpen()
调用如果失败则返回一个NULL指针,所以只需检查一下:

SDL_Joystick *joy = SDL_JoystickOpen(0);
if (joy) {
    // joy is a valid pointer so do stuff
}

1
投票

2.0 中的替代方案可能是

SDL_JoystickGetAttached

test/testjoystick.c
中还有一个SDL2源代码的示例(至少在SDL2-2.0.1中).


另请注意SDL 1.2 到 2.0 迁移指南操纵杆部分。它提供了有关 2.0 中新功能和新方式的各种信息。它还链接到 GameController 部分,例如SDL_GameControllerGetJoystick


0
投票

我知道这个问题迟到了 10 年,但今天我发现自己需要一个相当于

SDL_JoystickOpened()
的 SDL2,就我而言,我确实需要检查给定的操纵杆是否已经打开(即我需要避免为给定的操纵杆多次调用
SDL_JoystickOpen()
)。

SDL2 文档中没有很好地解释,但是如果您查看源代码,如果尚未打开具有给定实例 id 的操纵杆,则函数

SDL_JoystickFromInstanceID()
返回 NULL,否则返回操纵杆指针。您可以使用
SDL_JoystickGetDeviceInstanceID()
获取操纵杆的instance_id,无论它是否打开。通过使用这两个函数,您可以在 SDL2 中获得
SDL_JoystickOpened()
行为。

© www.soinside.com 2019 - 2024. All rights reserved.