目次 - API(機能別) - 力覚フィードバック

力覚フィードバック

インクルードファイル: SDL_haptic.h

概要

SDLハプティックサブシステムはハプティックデバイス(力覚装置)を扱う.

基本的な使い方は次の通りである.

  1. サブシステム(SDL_INIT_HAPTIC)を初期化する
  2. ハプティックデバイスを開く
  3. 効果(SDL_HapticEffect)を生成する
  4. 効果をSDL_HapticNewEffect()でアップロードする
  5. 効果をSDL_HapticRunEffect()で再生する
  6. (任意) 効果をSDL_HapticDestroyEffect()で解放する
  7. ハプティックデバイスを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 (アーカイブ)

構造体

  1. SDL_HapticCondition
  2. SDL_HapticConstant
  3. SDL_HapticCustom
  4. SDL_HapticDirection
  5. SDL_HapticEffect
  6. SDL_HapticLeftRight
  7. SDL_HapticPeriodic
  8. SDL_HapticRamp

関数

  1. SDL_HapticClose
  2. SDL_HapticDestroyEffect
  3. SDL_HapticEffectSupported
  4. SDL_HapticGetEffectStatus
  5. SDL_HapticIndex
  6. SDL_HapticName
  7. SDL_HapticNewEffect
  8. SDL_HapticNumAxes
  9. SDL_HapticNumEffects
  10. SDL_HapticNumEffectsPlaying
  11. SDL_HapticOpen
  12. SDL_HapticOpenFromJoystick
  13. SDL_HapticOpenFromMouse
  14. SDL_HapticOpened
  15. SDL_HapticPause
  16. SDL_HapticQuery
  17. SDL_HapticRumbleInit
  18. SDL_HapticRumblePlay
  19. SDL_HapticRumbleStop
  20. SDL_HapticRumbleSupported
  21. SDL_HapticRunEffect
  22. SDL_HapticSetAutocenter
  23. SDL_HapticSetGain
  24. SDL_HapticStopAll
  25. SDL_HapticStopEffect
  26. SDL_HapticUnpause
  27. SDL_HapticUpdateEffect
  28. SDL_JoystickIsHaptic
  29. SDL_MouseIsHaptic
  30. SDL_NumHaptics

SDL Wikiへのリンク

Force Feedback Support - SDL Wiki