【问题标题】:How to use a joystick from SDL on a Mac?如何在 Mac 上使用 SDL 的操纵杆?
【发布时间】:2014-11-20 22:17:42
【问题描述】:

来源很基础:

#include <SDL.h>

int main(int argc, char *argv[])
{
  if (SDL_Init(SDL_INIT_JOYSTICK))
  {
    return 1;
  }
  int num_joy, i;
  num_joy=SDL_NumJoysticks();
  printf("%d joysticks found\n", num_joy);
  for(i=0;i<num_joy;i++)
      printf("%s\n", SDL_JoystickName(i));

  SDL_Quit();
  return 0;
}

这会输出 Ubuntu 12.04 上连接的操纵杆的名称,但不会在我的 Mavericks Mac 上输出,它是从 Homebrew 安装的 SDL 1.2.15。以root身份运行它没有区别。我现在假设这只是 SDL 中的一个错误,但我很乐意被证明我在这里做错了。

来源:https://github.com/mikepurvis/joystick_sdl

【问题讨论】:

  • 您可能必须在 Mac 上手动安装驱动程序。例如,我寻找 Xbox360 控制器的 Mac 驱动程序,但只能找到安装第三方软件的说明。
  • 360控制器的特殊之处在于需要自己的驱动程序。我说的是标准 HID 操纵杆,几乎可以肯定它应该开箱即用。
  • 某些操作系统将输入链接到窗口。您可能必须创建一个窗口才能接收来自游戏手柄的输入事件。
  • SDL_Init 实际上确实短暂地创建了一个窗口的闪光——在这里似乎没有帮助。

标签: macos sdl osx-mavericks joystick


【解决方案1】:

你需要看看下面的 SDL2 函数调用:

SDL_GameControllerAddMappingsFromFile

这将在 SDL2 开箱即用不支持的游戏手柄配置中读取。

要获取社区维护的控制器列表,请查看: gamecontrollerdb.txt

要为可能随处可见的不起眼的游戏手柄创建自己的映射,您需要运行 SDL/test/controllermap.c 示例。 为了在 OSX 上构建这个示例,我使用了:

$ gcc controllermap.c -lSDL2 -I ../include -o controllermap -L ~/lib/ -framework AudioUnit -framework Carbon -framework ForceFeedback -framework CoreAudio -framework CoreVideo -framework IOKit -framework Cocoa

【讨论】:

    【解决方案2】:

    现在这是古老的历史,但问题是我的控制器 (Logitech F710) 通过设备顶部的开关处于 XInput 模式而不是 DirectInput 模式。 Mac OS X 不支持 XInput。

    拨动开关(至“D”)可使控制器按预期工作。

    参见。 http://cantonbecker.com/etcetera/2015/logitech-f710-for-os-x-macintosh-setup/

    【讨论】:

    • 在 2021 年仍然有用。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多