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

# 力覚フィードバック

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

## 概要

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

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

1. サブシステム(SDL_INIT_HAPTIC)を初期化する
2. ハプティックデバイスを開く
   - SDL_HapticOpen()で番号を指定して開く
   - SDL_HapticOpenFromJoystick()でジョイスティックから開く
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;
     }

     // 効果を生成する
     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