目次 - API(機能別) - 力覚フィードバック
力覚フィードバック
インクルードファイル: SDL_haptic.h
概要
SDLハプティックサブシステムはハプティックデバイス(力覚装置)を扱う.
基本的な使い方は次の通りである.
- サブシステム(SDL_INIT_HAPTIC)を初期化する
- ハプティックデバイスを開く
- 効果(SDL_HapticEffect)を生成する
- 効果をSDL_HapticNewEffect()でアップロードする
- 効果をSDL_HapticRunEffect()で再生する
- (任意) 効果をSDL_HapticDestroyEffect()で解放する
- ハプティックデバイスをSDL_HapticClose()で閉じる
サンプルコード
振動させる簡単な例
SDL_Haptic *haptic;
// デバイスを開く
haptic = SDL_HapticOpen( 0 );
if (haptic == NULL)
return -1;
// 単純な振動で初期化する
if (SDL_HapticRumbleInit( haptic ) != 0)
return -1;
// 50%の強さで2秒間再生する
if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0)
return -1;
SDL_Delay( 2000 );
// 終了する
SDL_HapticClose( haptic );
完全なコード
int test_haptic( SDL_Joystick * joystick ) {
SDL_Haptic *haptic;
SDL_HapticEffect effect;
int effect_id;
// デバイスを開く
haptic = SDL_HapticOpenFromJoystick( joystick );
if (haptic == NULL) return -1; // ジョイスティックにハプティックがない
// サイン波が可能か調べる
if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) {
SDL_HapticClose(haptic); // サイン効果がない
return -1;
}
// 効果を生成する
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_HapticNewEffect( haptic, &effect );
// 効果をテストする
SDL_HapticRunEffect( haptic, effect_id, 1 );
SDL_Delay( 5000); // 効果が終わるまで待つ
// 効果を破棄する. これはデバイスを閉じても行われる
SDL_HapticDestroyEffect( haptic, effect_id );
// デバイスを閉じる
SDL_HapticClose(haptic);
return 0; // 成功
}
このEdgar Simo Serraのblogにさらなる情報がある: SDL Haptic In Depth (アーカイブ)
関数
- SDL_HapticClose - SDL_HapticOpen()で開いたハプティックデバイスを閉じる
- SDL_HapticDestroyEffect - ハプティックデバイスの効果を破棄する
- SDL_HapticEffectSupported - ハプティックデバイスが効果に対応しているかチェックする
- SDL_HapticGetEffectStatus - 指定のハプティックデバイスの現在の効果の状態を得る
- SDL_HapticIndex - ハプティックデバイスの番号を得る
- SDL_HapticName - ハプティックデバイスの実装から得た名前を得る
- SDL_HapticNewEffect - 指定のハプティックデバイスの新しい効果を生成する
- SDL_HapticNumAxes - ハプティックデバイスの軸の数を得る
- SDL_HapticNumEffects - ハプティックデバイスに格納できる効果の数を得る
- SDL_HapticNumEffectsPlaying - ハプティックデバイスが同時に再生できる効果の数を得る
- SDL_HapticOpen - ハプティックデバイスを使うために開く
- SDL_HapticOpened - 指定の番号のハプティックデバイスが開いているかチェックする
- SDL_HapticOpenFromJoystick - ジョイスティックからハプティックデバイスを開く
- SDL_HapticOpenFromMouse - マウスからハプティックデバイスを開く
- SDL_HapticPause - ハプティックデバイスを一時停止する
- SDL_HapticQuery - 指定のハプティックデバイスが対応する機能を得る
- SDL_HapticRumbleInit - ハプティックデバイスを振動のために初期化する
- SDL_HapticRumblePlay - ハプティックデバイスを振動させる
- SDL_HapticRumbleStop - ハプティックデバイスの振動を止める
- SDL_HapticRumbleSupported - ハプティックデバイスが振動に対応しているかチェックする
- SDL_HapticRunEffect - ハプティックデバイスの効果を再生する
- SDL_HapticSetAutocenter - ハプティックデバイスの自動センタリングを設定する
- SDL_HapticSetGain - 指定のハプティックデバイスのゲインを設定する
- SDL_HapticStopAll - ハプティックデバイスで現在再生中の全ての効果を停止する
- SDL_HapticStopEffect - ハプティックデバイスで再生中の効果を停止する
- SDL_HapticUnpause - 一時停止中のハプティックデバイスを再開する
- SDL_HapticUpdateEffect - 効果のパラメータを更新する
- SDL_JoystickIsHaptic - ジョイスティックにハプティックの機能があるかチェックする
- SDL_MouseIsHaptic - マウスにハプティックの機能があるかチェックする
- SDL_NumHaptics - システムに接続されたハプティックデバイスの数を得る
構造体
- 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_SAWTOOTHDOWN - デバイスはノコギリ波(下降)効果に対応している
- SDL_HAPTIC_SAWTOOTHUP - デバイスはノコギリ波(上昇)効果に対応している
- SDL_HAPTIC_SINE - デバイスはサイン波効果に対応している
- SDL_HAPTIC_SPHERICAL - 方向の指定に球面座標を使用する
- SDL_HAPTIC_SPRING - デバイスは減衰効果に対応している - 軸の位置を使用する
- SDL_HAPTIC_STATUS - デバイスは現在の効果を獲得できる
- SDL_HAPTIC_STEERING_AXIS - 方向の指定にハンドル型コントローラの軸を使用する
- SDL_HAPTIC_TRIANGLE - デバイスは三角波効果に対応している
SDL Wikiへのリンク
Haptic - SDL Wiki