GameInput pode gerenciar a saída do dispositivo. Com o force feedback, os dispositivos de entrada de jogos podem mover fisicamente um ou mais controles de entrada do dispositivo para fornecer resposta tátil ao usuário. O force feedback funciona com dispositivos de entrada que simulam a operação de veículos, como volantes e equipamentos de simulação de voo. Esses dispositivos contêm um motor de force feedback que aplica força ao controle sobre um eixo. Em um volante de corrida, é uma força rotacional que gira o volante para simular um cenário do jogo. Use o force feedback com um manche de voo para tornar as alavancas difíceis de empurrar ou puxar a partir de uma determinada posição.
Para obter mais informações sobre as interfaces do GameInput que oferecem suporte a force feedback, consulte IGameInputDevice e IGameInputForceFeedbackEffect.
Verificar se há um motor de force feedback
Para criar um efeito de force feedback, você precisa da interface IGameInputDevice que representa o dispositivo de entrada ao qual você deseja aplicar o efeito. Depois de adquirir a interfaceIGameInputDevice, verifique o número de motores de force feedback no dispositivo examinando o struct GameInputDeviceInfo. Isso pode ser feito chamando IGameInputDevice::GetDeviceInfo. Se houver um motor de force feedback no dispositivo de entrada, o membro ForceFeedbackMotorCount de GameInputDeviceInfo terá um valor igual ou maior que um.
Criando um efeito de force feedback
Se o struct GameInputDeviceInfo de um dispositivo indicar que ele tem um ou mais motores de force feedback, crie um efeito de force feedback para o dispositivo chamando IGameInputDevice::CreateForceFeedbackEffect, conforme mostrado no código a seguir.GameInputForceFeedbackParams correspondente.
Por exemplo, para criar um efeito de feedback com o comportamento de mola, GameInputForceFeedbackParams consiste no valor GameInputForceFeedbackSpring de GameInputForceFeedbackEffectKind e no struct GameInputForceFeedbackConditionParams para uma mola. Preencha os parâmetros para o enum GameInputForceFeedbackEffectKind escolhido.
Depois de selecionar o efeito do motor de force feedback pelo índice e criar o struct GameInputForceFeedbackParams, chame IGameInputDevice::CreateForceFeedbackEffect para criar o efeito. Ele é representado por uma interface IGameInputForceFeedbackEffect.
O tempo de vida do efeito de force feedback está associado à interface IGameInputForceFeedbackEffect criada. Quando o efeito é criado, ele é carregado no dispositivo. Quando a última referência é liberada, o efeito de force feedback é interrompido e descarregado do motor do dispositivo.
Aplicando e atualizando efeitos de force feedback
Quando um efeito de force feedback é criado, ele é carregado diretamente no motor do dispositivo. Um motor de force feedback tem uma quantidade finita de memória. Isso limita o número de efeitos de force feedback que são carregados e reproduzidos ao mesmo tempo. Chamar IGameInputDevice::CreateForceFeedbackEffect depois de atingir esse limite faz com que a função retorne um erro. Depois de criado, o efeito de force feedback é carregado no motor de force feedback em um estado parado. Depois de carregado, use a interface IGameInputForceFeedbackEffect para definir o estado do efeito comoRunning. Isso reproduz o efeito no motor do dispositivo.
Estados do efeito de force feedback
Um efeito de force feedback passa por vários estados para corresponder ao estado atual do jogo. É importante que você atualize e observe o estado de um efeito de acordo com seu jogo para manter o comportamento esperado. Os estados do force feedback podem ser definidos de acordo com GameInputFeedbackEffectState, conforme mostrado no código a seguir.Stopped. Se um efeito de feedback novo ou parado for definido para o estado Running, ele será reproduzido desde o início do efeito. Definir o estado como Paused faz com que o efeito de force feedback pare de afetar o motor. No entanto, definir um efeito em estado Paused como Running faz com que o efeito de force feedback aplique o padrão do efeito a partir de onde parou.
Interromper um efeito encerra o efeito, mas você pode acioná-lo novamente mais tarde. Por exemplo, quando um usuário sai de um terreno acidentado em um jogo de corrida. Da mesma forma, pausar um efeito é útil em situações em que a jogabilidade não muda, mas o usuário deseja navegar pela interface do usuário, como um menu de pausa.
Defina o estado de um efeito de force feedback chamando IGameInputForceFeedbackEffect::SetState.
Atualizando um efeito de force feedback
Ajuste o ganho de um efeito de force feedback ou forneça um novo conjunto de parâmetros se o novo struct GameInputForceFeedbackParams compartilhar o mesmo enum GameInputForceFeedbackEffectKind.Ganho
Altere a intensidade de um efeito de force feedback ajustando seu ganho com a função IGameInputForceFeedbackEffect::SetGain, conforme mostrado no código a seguir.Definindo novos parâmetros
Forneça novos parâmetros para um efeito de force feedback usando a função IGameInputForceFeedbackEffect::SetParams, conforme mostrado no código a seguir.GameInputForceFeedbackConstant.
