Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Uaktualniono: 22.02.2026

©2026 mgr Jerzy Wałaszek

Interfejs SDL2:

Wsparcie Urządzeń Haptic

SPIS TREŚCI

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.

Wsparcie Urządzeń Haptic

Wprowadzenie

Podsystem SDL pozwala ci kontrolować urządzenia haptic (z siłowym sprzężeniem zwrotnym).

Typowe użycie tego podsystemu wyglada następująco:

  1. Dokonaj inicjalizacji podsystemu (SDL_INIT_HAPTIC).
    Otwórz urządzenie haptic:
    1. SDL_HapticOpen(), aby otworzyć poprzez indeks.
    2. SDL_HapticOpenFromJoystick(), aby otworzyć poprzez istniejący joystick.
  2. Utwórz efekt siłowy (SDL_HapticEffect).
  3. Załaduj ten efekt za pomocą SDL_HapticNewEffect().
  4. Uruchom ten efekt za pomocą SDL_HapticRunEffect().
  5. (Opcjonalnie) Usuń efek za pomocą SDL_HapticDestroyEffect().
  6. Zamknij urządzenie haptic za pomocą SDL_HapticClose().

Przykładowe kody

SDL_Haptic *haptic;

// Otwórz urządzenie
haptic = SDL_HapticOpen( 0 );
if (haptic == NULL)
   return -1;

// Inicjalizuj prosty łomot
if (SDL_HapticRumbleInit( haptic ) != 0)
   return -1;

// Odtwarzaj efekt z mocą 50% przez 2 sekundy
if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0)
   return -1;
SDL_Delay( 2000 );

// Posprzątaj
SDL_HapticClose( haptic );
int test_haptic( SDL_Joystick * joystick ) {
 SDL_Haptic *haptic;
 SDL_HapticEffect effect;
 int effect_id;

 // Otwórz urządzenie
 haptic = SDL_HapticOpenFromJoystick( joystick );
 if (haptic == NULL) return -1; // Najprawdopodobniej joystick nie jest urządzeniem haptic

 // Sprawdź, czy potrafi odtwarzać fale sinusoidalne
 if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) {
  SDL_HapticClose(haptic); // No sine effect
  return -1;
 }

 // Utwórz ten efekt
 SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 jest standardowo bezpieczne
 effect.type = SDL_HAPTIC_SINE;
 effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Współrzędne biegunowe
 effect.periodic.direction.dir[0] = 18000; // Siła nadchodzi z południa
 effect.periodic.period = 1000; // 1000 ms
 effect.periodic.magnitude = 20000; // 20000/32767 siła
 effect.periodic.length = 5000; // Długość 5 sekund
 effect.periodic.attack_length = 1000; // 1 sekundę zajmuje osiągnięcie maksymalnej siły
 effect.periodic.fade_length = 1000; // 1 sekundę zajmuje wygaszanie

 // Załaduj ten efekt
 effect_id = SDL_HapticNewEffect( haptic, &effect );

 // Testuj ten efekt
 SDL_HapticRunEffect( haptic, effect_id, 1 );
 SDL_Delay( 5000); // Poczekaj, aż efekt się zakończy

 // Usuwamy ten efekt, chociaż zamknięcie urządzenia zrobi to samo
 SDL_HapticDestroyEffect( haptic, effect_id );

 // Zamknij urządzenie
 SDL_HapticClose(haptic);

 return 0; // Sukces
}

Więcej informacji znajdziesz na blogu Edgara Simo Serra (język angielski): SDL Haptic In Depth (Archiwum).

Struktury

SDL_HapticCondition
SDL_HapticConstant
SDL_HapticCustom
SDL_HapticDirection
SDL_HapticEffect
SDL_HapticLeftRight
SDL_HapticPeriodic
SDL_HapticRamp

Funkcje

SDL_HapticClose
SDL_HapticDestroyEffect
SDL_HapticEffectSupported
SDL_HapticGetEffectStatus
SDL_HapticIndex
SDL_HapticName
SDL_HapticNewEffect
SDL_HapticNumAxes
SDL_HapticNumEffects
SDL_HapticNumEffectsPlaying
SDL_HapticOpen
SDL_HapticOpenFromJoystick
SDL_HapticOpenFromMouse
SDL_HapticOpened
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

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.