目次 - SDL 3.0 API(機能別) - 力覚フィードバック
力覚フィードバック
概要
SDLハプティックサブシステムはハプティックデバイス(力覚装置)を扱う.
基本的な使い方は次の通りである.
- サブシステム(SDL_INIT_HAPTIC)を初期化する
- ハプティックデバイスを開く
- エフェクトを生成する (SDL_HapticEffect)
- エフェクトをSDL_CreateHapticEffect()でアップロードする
- エフェクトをSDL_RunHapticEffect()で再生する
- (任意) エフェクトをSDL_DestroyHapticEffect()で解放する
- ハプティックデバイスをSDL_CloseHaptic()で閉じる
振動させる簡単な例
SDL_Haptic *haptic = NULL;
// デバイスを開く
SDL_HapticID *haptics = SDL_GetHaptics(NULL);
if (haptics) {
haptic = SDL_OpenHaptic(haptics[0]);
SDL_free(haptics);
}
if (haptic == NULL)
return;
// 単純な振動で初期化する
if (!SDL_InitHapticRumble(haptic))
return;
// 50%の強さで2秒間再生する
if (!SDL_PlayHapticRumble(haptic, 0.5, 2000))
return;
SDL_Delay(2000);
// 終了する
SDL_CloseHaptic(haptic);
完全なコード
bool test_haptic(SDL_Joystick *joystick)
{
SDL_Haptic *haptic;
SDL_HapticEffect effect;
SDL_HapticEffectID effect_id;
// デバイスを開く
haptic = SDL_OpenHapticFromJoystick(joystick);
if (haptic == NULL) return false; // ジョイスティックにハプティックがない場合が大半
// サイン波が可能か調べる
if ((SDL_GetHapticFeatures(haptic) & SDL_HAPTIC_SINE)==0) {
SDL_CloseHaptic(haptic); // サインエフェクトがない
return false;
}
// エフェクトを生成する
SDL_memset(&effect, 0, sizeof(SDL_HapticEffect)); // 安全のためデフォルトを0にする
effect.type = SDL_HAPTIC_SINE;
effect.periodic.direction.type = SDL_HAPTIC_POLAR; // 極座標系
effect.periodic.direction.dir[0] = 18000; // エフェクトは南から来る
effect.periodic.period = 1000; // 1000ミリ秒
effect.periodic.magnitude = 20000; // 20000/32767 の強さ
effect.periodic.length = 5000; // 5秒間
effect.periodic.attack_length = 1000; // 1秒間で最大に達する
effect.periodic.fade_length = 1000; // 1秒間で停止する
// エフェクトをアップロードする
effect_id = SDL_CreateHapticEffect(haptic, &effect);
// エフェクトをテストする
SDL_RunHapticEffect(haptic, effect_id, 1);
SDL_Delay(5000); // エフェクトが終わるまで待つ
// エフェクトを破棄する. これはデバイスを閉じても行われる
SDL_DestroyHapticEffect(haptic, effect_id);
// デバイスを閉じる
SDL_CloseHaptic(haptic);
return true; // 成功
}
SDLハプティックサブシステムはスレッドセーフではないので注意すること.
関数
- SDL_CloseHaptic - SDL_OpenHaptic()でオープンしたハプティックデバイスをクローズする
- SDL_CreateHapticEffect - ハプティックデバイスに新しいエフェクトを生成する
- SDL_DestroyHapticEffect - ハプティックデバイスのエフェクトを再生する
- SDL_GetHapticEffectStatus - ハプティックデバイスのエフェクトの再生状態を得る
- SDL_GetHapticFeatures - ハプティックデバイスの対応する機能を得る
- SDL_GetHapticFromID - オープンされている場合, インスタンスIDからハプティックデバイスオブジェクトを得る
- SDL_GetHapticID - オープンされたハプティックデバイスからインスタンスIDを得る
- SDL_GetHapticName - オープンされたハプティックデバイスの実装に依存する名前を得る
- SDL_GetHapticNameForID - インスタンスIDからハプティックデバイスの実装に依存する名前を得る
- SDL_GetHaptics - 接続されているハプティックデバイスの一覧を得る
- SDL_GetMaxHapticEffects - ハプティックデバイスに格納できるエフェクトの数を得る
- SDL_GetMaxHapticEffectsPlaying - ハプティックデバイスが同時に再生できるエフェクトの数を得る
- SDL_GetNumHapticAxes - ハプティックデバイスの方向の数を得る
- SDL_HapticEffectSupported - ハプティックデバイスがエフェクトに対応しているかチェックする
- SDL_HapticRumbleSupported - ハプティックデバイスが単純な振動に対応しているかチェックする
- SDL_InitHapticRumble - ジョイスティックにハプティックの機能があるかチェックする
- SDL_IsJoystickHaptic - ジョイスティックにハプティックの機能があるかチェックする
- SDL_IsMouseHaptic - マウスにハプティックの機能があるかチェックする
- SDL_OpenHaptic - ハプティックデバイスを使用するためにオープンする
- SDL_OpenHapticFromJoystick - ジョイスティックからハプティックデバイスをオープンする
- SDL_OpenHapticFromMouse - 使用中のマウスからハプティックデバイスをオープンする
- SDL_PauseHaptic - ハプティックデバイスを一時停止する
- SDL_PlayHapticRumble - ハプティックデバイスの単純な振動を開始する
- SDL_ResumeHaptic - 一時停止中のハプティックデバイスを再開する
- SDL_RunHapticEffect - ハプティックデバイスのエフェクトを再生する
- SDL_SetHapticAutocenter - ハプティックデバイスの自動センタリングを設定する
- SDL_SetHapticGain - 指定のハプティックデバイスのゲインを設定する
- SDL_StopHapticEffect - ハプティックデバイスの再生中のエフェクトを停止する
- SDL_StopHapticEffects - ハプティックデバイスの再生中のエフェクトを全て停止する
- SDL_StopHapticRumble - ハプティックデバイスの単純な振動を停止する
- SDL_UpdateHapticEffect - ハプティックデバイスのエフェクトのパラメータを変更する
型
- SDL_Haptic - SDLハプティックデバイスオブジェクトの型
- SDL_HapticDirectionType - ハプティックの方向で使用する座標系の型
- SDL_HapticEffectID - ハプティックエフェクトIDの型
- SDL_HapticEffectType - ハプティックエフェクトの種類の型
- SDL_HapticID - システムに接続されたハプティックデバイスのユニークなIDの型
構造体
- SDL_HapticCondition - 条件エフェクトのテンプレートの構造体
- SDL_HapticConstant - 一定エフェクトのテンプレートの構造体
- SDL_HapticCustom - カスタムエフェクトのテンプレートの構造体
- SDL_HapticDirection - エフェクトの方向の構造体
- SDL_HapticEffect - ハプティックエフェクトの全テンプレートの共用体
- SDL_HapticLeftRight - 左右エフェクトのテンプレートの構造体
- SDL_HapticPeriodic - 周期エフェクトのテンプレートの構造体
- SDL_HapticRamp - 増減エフェクトのテンプレートの構造体
マクロ
- SDL_HAPTIC_AUTOCENTER - ハプティックデバイスが自動センタリングに対応していることを表すマクロ
- SDL_HAPTIC_CARTESIAN - ハプティックデバイスのエフェクトの方向で直交座標を使用することを表すマクロ
- SDL_HAPTIC_CONSTANT - ハプティックデバイスの一定エフェクトを表すマクロ
- SDL_HAPTIC_CUSTOM - ハプティックデバイスのカスタムエフェクトを表すマクロ
- SDL_HAPTIC_DAMPER - ハプティックデバイスのダンパーエフェクト(速度を使用)を表すマクロ
- SDL_HAPTIC_FRICTION - ハプティックデバイスの摩擦エフェクト(運動を使用)を表すマクロ
- SDL_HAPTIC_GAIN - ハプティックデバイス全体のゲインを設定できることを表すマクロ
- SDL_HAPTIC_INERTIA - ハプティックデバイスの慣性エフェクト(加速度を使用)を表すマクロ
- SDL_HAPTIC_INFINITY - ハプティックデバイスの無限の再生回数のマクロ
- SDL_HAPTIC_LEFTRIGHT - ハプティックデバイスの左右エフェクトを表すマクロ
- SDL_HAPTIC_PAUSE - ハプティックデバイスが一時停止可能であることを表すマクロ
- SDL_HAPTIC_POLAR - ハプティックデバイスのエフェクトの方向で極座標を使用することを表すマクロ
- SDL_HAPTIC_RAMP - ハプティックデバイスの増減エフェクトを表すマクロ
- SDL_HAPTIC_RESERVED1 - ハプティックデバイスの将来のための予約
- SDL_HAPTIC_RESERVED2 - ハプティックデバイスの将来のための予約
- SDL_HAPTIC_RESERVED3 - ハプティックデバイスの将来のための予約
- SDL_HAPTIC_SAWTOOTHDOWN - ハプティックデバイスの下降ノコギリ波エフェクトを表すマクロ
- SDL_HAPTIC_SAWTOOTHUP - ハプティックデバイスの上昇ノコギリ波エフェクトを表すマクロ
- SDL_HAPTIC_SINE - ハプティックデバイスのサイン波エフェクトを表すマクロ
- SDL_HAPTIC_SPHERICAL - ハプティックデバイスのエフェクトの方向で球面座標を使用することを表すマクロ
- SDL_HAPTIC_SPRING - ハプティックデバイスのバネエフェクト(位置を使用)を表すマクロ
- SDL_HAPTIC_SQUARE - ハプティックデバイスの矩形波エフェクトを表すマクロ
- SDL_HAPTIC_STATUS - ハプティックデバイスの状態を得られることを表すマクロ
- SDL_HAPTIC_STEERING_AXIS - ハンドル型コントローラのエフェクトで使用する座標系のマクロ
- SDL_HAPTIC_TRIANGLE - ハプティックデバイスの三角波エフェクトを表すマクロ
SDL Wikiへのリンク
SDL3/CategoryHaptic - SDL Wiki