Non esiste un modo standardizzato.
Dispositivi diversi presentano diverse funzionalità e limitazioni.
La stragrande maggioranza dei dispositivi non supporta l'effettivo "feedback di forza" (ad esempio: un volante che quando colpisce un marciapiede / buca consentirebbe al programmatore di spingere indietro di un angolo specifico), ma rombo solo in una direzione incontrollata / arbitraria.
Quindi la maggior parte delle funzionalità di Force Feedback menzionate su MSDN / DirectX e altre API non si sono mai concretizzate concretamente sul mercato degli utenti o hanno implementazioni così scarse e / o non portatili dei controlli "intelligenti" (inviluppo, ripetizione, ecc.) Come essere così inutilizzabili che in pratica gli sviluppatori sono spesso costretti a usare i controlli ON / OFF direttamente con la propria implementazione degli effetti.
I dispositivi più avanzati che consentono il feedback della forza servocontrollata richiedono API personalizzate poiché le API di input generiche non supportano i parametri necessari (angoli esatti, forze esatte, limiti, ecc.).
L'aggiunta di tecnologie emergenti come i guanti antirumore VR nel mix rende ancora più carenti quelle API generiche.
L'implementazione più comune è con due motori DC con un carico sbilanciato ciascuno, uno pesato più pesante dell'altro e senza controllo preciso della velocità.
Come minimo hai il controllo on / off su di essi e puoi fare un controllo limitato della potenza PWM ma non un controllo esatto della velocità. Non sai quale sarà la velocità e la vibrazione risultante. Controller diversi hanno motori e pesi diversi che funzionano a velocità diverse per la stessa impostazione.
I motori devono prima girare e richiedono piena potenza per un po 'di tempo, quindi possono essere PWM a un'impostazione più bassa. Il ritardo di rotazione limita notevolmente la reattività.
I controller vengono spesso aggiornati una volta per frame, offrendo una frequenza di aggiornamento da 20Hz a 100Hz. Ciò limita la risoluzione del controllo PWM poiché non si desidera che i motori si arrestino all'impostazione più bassa. E non sai quanto in basso possono andare i motori del controller dell'utente finale prima di arrestarsi (arrestarsi), quindi hai bisogno di un buon margine di sicurezza.
Alcuni requisiti di sistema pongono ulteriori limiti su ciò che è possibile fare con essi.
I dispositivi mobili di solito hanno solo 1 motore a vibrazione e la PWM potrebbe non essere possibile a causa della bassa inerzia delle dimensioni del peso e della velocità di aggiornamento lenta. Il sistema può filtrarlo ulteriormente per prevenire abusi o addirittura danni (limiti dei transistor del driver di alimentazione e picchi di induzione) o solo un sottosistema GPIO molto lento.
Sui dispositivi mobili potresti essere limitato o voler limitarti a "vibrare per circa X * 50 millisecondi" senza PWM.
Alcuni dispositivi e controller più recenti hanno un solenoide pilotato come un altoparlante da un'onda audio a bassa frequenza di campionamento. Questi ti offrono un maggiore controllo ma sono completamente diversi dai controller più comuni.
A causa di tutte queste differenze si può prendere in astratto il sistema di vibrazione di giocare un numero limitato di alto livello macro-effetti per nome in un tiro-e-dimentica moda: PlayVibration(player, "Got Loot");
, PlayVibration(player, "Heavy Fall");
, StopAllVibrationFor(player);
, ...
Quindi dovrai creare effetti di vibrazione di basso livello e codice di controllo delle vibrazioni adattato a ciascuna piattaforma individualmente .
Anche per un gioco musicale che richiede un colpo solo PlayVibration
per ogni battito è più facile da gestire e controllare quando si considera il fatto di mettere in pausa il gioco e le questioni di risincronizzazione di un generatore di effetti periodici potenzialmente intelligente.
Mentre i dispositivi con un vero rombo guidato dal solenoide possono essere trattati come un dispositivo audio e utilizzano API audio a causa di problemi di batteria, ciò potrebbe compromettere le normative del sistema se il solenoide è costantemente alimentato / attivo . "Livello di potenza 0" potrebbe non essere uguale a "Solenoide spento", quindi anche in questo caso è necessario prestare particolare attenzione.