GameInput puede administrar la salida del dispositivo. Con el force feedback, los dispositivos de entrada de juego pueden mover físicamente uno o varios de los controles de entrada del dispositivo para proporcionar retroalimentación táctil al usuario. El force feedback funciona con dispositivos de entrada que simulan el manejo de vehículos, como volantes de conducción y equipos de simulación de vuelo. Estos dispositivos contienen un motor de force feedback que aplica fuerza al control sobre un eje. En un volante de carreras, es una fuerza rotacional que gira el volante para simular una situación del juego. Use el force feedback con una palanca de vuelo para hacer que las palancas sean difíciles de empujar o tirar desde una posición determinada.
Para obtener más información sobre las interfaces de GameInput que admiten force feedback, consulte IGameInputDevice e IGameInputForceFeedbackEffect.
Comprobar la existencia de un motor de force feedback
Para crear un efecto de force feedback, necesita la interfaz IGameInputDevice que representa el dispositivo de entrada al que desea aplicar el efecto. Después de adquirir la interfazIGameInputDevice, compruebe el número de motores de force feedback del dispositivo examinando la estructura GameInputDeviceInfo. Esto se puede hacer llamando a IGameInputDevice::GetDeviceInfo. Si hay un motor de force feedback en el dispositivo de entrada, el miembro ForceFeedbackMotorCount de GameInputDeviceInfo tiene un valor de uno o superior.
Creación de un efecto de force feedback
Si la estructura GameInputDeviceInfo de un dispositivo indica que tiene uno o varios motores de force feedback, cree un efecto de force feedback para el dispositivo llamando a IGameInputDevice::CreateForceFeedbackEffect, como se muestra en el código siguiente.GameInputForceFeedbackParams correspondiente.
Por ejemplo, para crear un efecto de feedback con el comportamiento de resorte, GameInputForceFeedbackParams consta del valor GameInputForceFeedbackSpring de GameInputForceFeedbackEffectKind y la estructura GameInputForceFeedbackConditionParams para un resorte. Rellene los parámetros de la enumeración GameInputForceFeedbackEffectKind elegida.
Después de seleccionar el efecto del motor de force feedback por su índice y de crear la estructura GameInputForceFeedbackParams, llame a IGameInputDevice::CreateForceFeedbackEffect para crear el efecto. Está representado por una interfaz IGameInputForceFeedbackEffect.
La duración del efecto de force feedback está asociada a la interfaz IGameInputForceFeedbackEffect creada. Cuando se crea el efecto, se carga en el dispositivo. Cuando se libera la última referencia, el efecto de force feedback se detiene y se descarga del motor del dispositivo.
Aplicación y actualización de efectos de force feedback
Cuando se crea un efecto de force feedback, se carga directamente en el motor del dispositivo. Un motor de force feedback tiene una cantidad finita de memoria. Esto limita el número de efectos de force feedback que se cargan y reproducen al mismo tiempo. Llamar a IGameInputDevice::CreateForceFeedbackEffect después de alcanzar este límite hace que la función devuelva un error. Después de crear un efecto de force feedback, se carga en el motor de force feedback en estado detenido. Una vez cargado, use la interfaz IGameInputForceFeedbackEffect para establecer el estado del efecto enRunning. Esto reproduce el efecto en el motor del dispositivo.
Estados del efecto de force feedback
Un efecto de force feedback pasa por varios estados para adaptarse al estado actual del juego. Es importante actualizar y tener en cuenta el estado de un efecto de acuerdo con el juego para mantener el comportamiento esperado. Los estados del force feedback se pueden establecer según GameInputFeedbackEffectState, como se muestra en el código siguiente.Stopped. Si un efecto de feedback nuevo o detenido se establece en el estado Running, se reproduce desde el principio del efecto. Establecer el estado en Paused hace que el efecto de force feedback deje de afectar al motor. Sin embargo, establecer un efecto en estado Paused en Running hace que el efecto de force feedback aplique el patrón del efecto donde lo dejó.
Detener un efecto lo finaliza, pero puede desencadenarlo de nuevo más adelante. Por ejemplo, cuando un usuario abandona un terreno accidentado en un juego de carreras. Del mismo modo, pausar un efecto es útil en situaciones en las que el juego no cambia pero el usuario desea navegar por la interfaz de usuario, como un menú de pausa.
Establezca el estado de un efecto de force feedback llamando a IGameInputForceFeedbackEffect::SetState.
Actualización de un efecto de force feedback
Ajuste la ganancia de un efecto de force feedback o proporcione un nuevo conjunto de parámetros si la nueva estructura GameInputForceFeedbackParams comparte la misma enumeración GameInputForceFeedbackEffectKind.Ganancia
Cambie la intensidad de un efecto de force feedback ajustando su ganancia con la función IGameInputForceFeedbackEffect::SetGain, como se muestra en el código siguiente.Establecimiento de nuevos parámetros
Proporcione nuevos parámetros para un efecto de force feedback mediante la función IGameInputForceFeedbackEffect::SetParams, como se muestra en el código siguiente.GameInputForceFeedbackConstant.
