目次 - SDL 3.0 API(機能別) - ゲームパッド
ゲームパッド
概要
SDLは, ジョイスティックを単にボタン, 方向, ハットスイッチの塊として扱う低レベルジョイスティックAPIを提供している.
もし自分でコントローラの設定画面を作るつもりならば, これは柔軟な対応ができるが, すべきことが多く, さらに現在の「ジョイスティック」のほとんどは実際には家庭用ゲーム機のようなゲームパッドであると考えられる.
そのため, SDLは低レベルジョイスティック機能の上にゲームパッドAPIを提供している.
ジョイスティックとゲームパッドの違いは, ゲームパッドはボタンと方向がデバイス上のどこにあるかがわかることである.
ゲームパッドでは「ボタン3」や「方向2」のような番号ではなく, デバイス上の標準的な位置で扱われる. (十字キー, ショルダーボタン, トリガー, A/B/X/Y(またはX/O/Square/Triangle)のような)
ジョイスティックは, SDLにデバイスの使用の詳細を伝える呪文のような文字列(これはあるハードウェアでは, ボタン2が押されると, 実際には十字キーの上などの情報である)でゲームパッドに変わる.
SDLには多くの主要なコントローラの設定が組み込まれている. そしてSDLに組み込まれていない場合は, ユーザは環境変数を通して自分のコントローラの情報を追加できる.
これらの関数を使うときは, SDL_INIT_GAMEPADフラグを付けてSDL_Init()を呼ぶ必要がある. これでSDLはシステムのゲームパッドをスキャンし, 正しいドライバを読み込むようになる.
アプリケーションがバックグラウンドのときもゲームパッドのイベントを受信したい場合は, SDL_Init()を呼ぶ前にSDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTSヒントを設定する必要がある.
ゲームパッドには, 振動, カラーLED, タッチパッド, ジャイロなどの様々な追加機能がある.
これらの機能に対応しているかは, コントローラとOSが対応しているかによる.
実行中にLEDと振動が利用可能かは, SDL_GetGamepadProperties()を呼び, 可不可のプロパティをチェックするとわかる.
タッチパッドはSDL_GetNumGamepadTouchpads()を呼ぶと, ジャイロと加速度センサーはSDL_GamepadHasSensor()を呼ぶとわかる.
デフォルトではSDLは最も受け入れ可能なドライバを使用しようとする. しかし, OSのドライバはSDL_hints.hにある様々なジョイスティックのヒントで調整できる.
アプリケーションはゲームパッドのホットプラグインを行えるべきである.
Xbox, Stram Deckなどの一部の環境では, 審査の必須事項である.
macOSやWindowsなどのその他の環境では, Windows.Gaming.Inputを使っている場合, コントローラは起動時には使えず, プロセスイベントが開始された時点で使えるようになる場合がある.
関数
- SDL_AddGamepadMapping
- SDL_AddGamepadMappingsFromFile
- SDL_AddGamepadMappingsFromIO
- SDL_CloseGamepad
- SDL_GamepadConnected
- SDL_GamepadEventsEnabled
- SDL_GamepadHasAxis
- SDL_GamepadHasButton
- SDL_GamepadHasSensor
- SDL_GamepadSensorEnabled
- SDL_GetGamepadAppleSFSymbolsNameForAxis
- SDL_GetGamepadAppleSFSymbolsNameForButton
- SDL_GetGamepadAxis
- SDL_GetGamepadAxisFromString
- SDL_GetGamepadBindings
- SDL_GetGamepadButton
- SDL_GetGamepadButtonFromString
- SDL_GetGamepadButtonLabel
- SDL_GetGamepadButtonLabelForType
- SDL_GetGamepadConnectionState
- SDL_GetGamepadFirmwareVersion
- SDL_GetGamepadFromID
- SDL_GetGamepadFromPlayerIndex
- SDL_GetGamepadGUIDForID
- SDL_GetGamepadID
- SDL_GetGamepadJoystick
- SDL_GetGamepadMapping
- SDL_GetGamepadMappingForGUID
- SDL_GetGamepadMappingForID
- SDL_GetGamepadMappings
- SDL_GetGamepadName
- SDL_GetGamepadNameForID
- SDL_GetGamepadPath
- SDL_GetGamepadPathForID
- SDL_GetGamepadPlayerIndex
- SDL_GetGamepadPlayerIndexForID
- SDL_GetGamepadPowerInfo
- SDL_GetGamepadProduct
- SDL_GetGamepadProductForID
- SDL_GetGamepadProductVersion
- SDL_GetGamepadProductVersionForID
- SDL_GetGamepadProperties
- SDL_GetGamepads
- SDL_GetGamepadSensorData
- SDL_GetGamepadSensorDataRate
- SDL_GetGamepadSerial
- SDL_GetGamepadSteamHandle
- SDL_GetGamepadStringForAxis
- SDL_GetGamepadStringForButton
- SDL_GetGamepadStringForType
- SDL_GetGamepadTouchpadFinger
- SDL_GetGamepadType
- SDL_GetGamepadTypeForID
- SDL_GetGamepadTypeFromString
- SDL_GetGamepadVendor
- SDL_GetGamepadVendorForID
- SDL_GetNumGamepadTouchpadFingers
- SDL_GetNumGamepadTouchpads
- SDL_GetRealGamepadType
- SDL_GetRealGamepadTypeForID
- SDL_HasGamepad
- SDL_IsGamepad
- SDL_OpenGamepad
- SDL_ReloadGamepadMappings
- SDL_RumbleGamepad
- SDL_RumbleGamepadTriggers
- SDL_SendGamepadEffect
- SDL_SetGamepadEventsEnabled
- SDL_SetGamepadLED
- SDL_SetGamepadMapping
- SDL_SetGamepadPlayerIndex
- SDL_SetGamepadSensorEnabled
- SDL_UpdateGamepads
型
- SDL_Gamepad
構造体
- SDL_GamepadBinding
列挙体
- SDL_GamepadAxis
- SDL_GamepadBindingType
- SDL_GamepadButton
- SDL_GamepadButtonLabel
- SDL_GamepadType
SDL Wikiへのリンク
SDL3/CategoryGamepad - SDL Wiki