Não existe uma maneira padronizada.
Dispositivos diferentes têm diferentes capacidades e limitações de vibração.
A grande maioria dos dispositivos não suporta "feedback de força" real (por exemplo: um volante que ao bater em um meio-fio / calçada permitiria que o programador voltasse para um ângulo específico), mas apenas ria em alguma direção descontrolada / arbitrária.
Portanto, a maioria dos recursos Force Feedback mencionados no MSDN / DirectX e em outras APIs nunca se materializaram na prática no mercado de usuários ou possuem implementações ruins e / ou não portáteis dos controles "inteligentes" (envelope, repetição, etc.) como ser tão inutilizável que, na prática, os desenvolvedores geralmente são obrigados a usar os controles ON / OFF diretamente com sua própria implementação de efeito.
Os dispositivos mais avançados que permitem feedback de força servo-controlado precisam de APIs personalizadas, pois as APIs de entrada genéricas não suportam os parâmetros necessários (ângulos exatos, forças exatas, limites etc.).
A adição de tecnologias emergentes, como luvas de proteção VR, faz com que essas APIs genéricas sejam ainda mais ausentes.
A implementação mais comum é com dois motores DC com uma carga desbalanceada cada um, sendo um mais pesado que o outro e sem controle preciso da velocidade.
No mínimo, você tem controle liga / desliga sobre eles e pode executar algum controle limitado de energia PWM, mas não o controle exato da velocidade. Você não sabe qual será a velocidade e a vibração resultante. Controladores diferentes têm motores e pesos diferentes que serão executados em velocidades diferentes para a mesma configuração.
Os motores precisam girar primeiro e requerem potência total por um tempo, podendo ser PWM para uma configuração mais baixa. O atraso de rotação limita muito a capacidade de resposta.
Os controladores geralmente são atualizados uma vez por quadro, fornecendo uma frequência de atualização de aproximadamente 20Hz a 100Hz. Isso limita a resolução do seu controle PWM, pois você não deseja que os motores parem na configuração mais baixa. E você não sabe o quão baixo os motores do controlador do usuário final podem ficar antes de parar (parar), para que você precise de uma boa margem de segurança.
Alguns requisitos do sistema limitam ainda mais o que você pode fazer com eles.
Os dispositivos móveis geralmente têm apenas 1 motor de vibração e o PWM pode não ser possível devido à baixa inércia do tamanho do peso e à lenta taxa de atualização. O sistema pode filtrá-lo ainda mais para evitar abusos ou até danos (limites do transistor do driver de força e picos de indução) ou apenas um subsistema GPIO realmente lento.
No celular, você pode estar limitado ou querer limitar-se a "vibrar por aproximadamente X * 50 milissegundos" sem PWM.
Alguns dispositivos e controladores mais novos têm um solenóide acionado como um alto-falante por uma onda de áudio de baixa taxa de amostragem. Eles oferecem mais controle, mas são completamente diferentes dos controladores mais comuns.
Devido a todas essas diferenças que você pode querer resumo do sistema de vibração para jogar um número limitado de alto nível macro-efeitos pelo nome em um shoot-e-esqueça de moda: PlayVibration(player, "Got Loot");
, PlayVibration(player, "Heavy Fall");
, StopAllVibrationFor(player);
, ...
Então você terá que criar efeitos de vibração de baixo nível e código de controle de vibração adaptados a cada plataforma individualmente .
Mesmo para um jogo de música que exige apenas um tiro PlayVibration
para cada batida, é mais fácil gerenciar e controlar ao considerar a pausa do jogo e os problemas de ressincronização de um gerador de efeito periódico potencialmente inteligente.
Embora os dispositivos com um ruído real acionado por solenóide possam ser tratados como um dispositivo de áudio e usar APIs de áudio devido a preocupações com a bateria, isso pode violar os regulamentos do sistema se o solenóide estiver constantemente ligado / ativo . O "nível de potência 0" pode não ser o mesmo que o "solenóide desligado"; mesmo assim, é necessário um cuidado especial.