Descripción general

Los controles de juegos están equipados con funciones adicionales que mejoran significativamente la interacción de los jugadores y la inmersión. La tecnología táctil, los sensores de movimiento y las funciones de luz de los controles de juegos para Android son fundamentales para profundizar y enriquecer la experiencia de juego. Cada función estimula de manera única los sentidos del jugador, lo que fomenta interacciones más intuitivas y significativas dentro del juego.

Tecnología háptica

La función de tecnología táctil de los controles de juegos de Android es una tecnología fundamental que proporciona respuestas táctiles realistas durante el juego.

La tecnología de tecnología táctil brinda sensaciones físicas al usuario a través de vibraciones o movimientos. Por ejemplo, cuando se produce una explosión en el juego, el control vibra, lo que permite que el jugador sienta el impacto de manera realista. Además, las vibraciones sutiles se pueden sincronizar con el sonido de un personaje que camina o corre, lo que ofrece una experiencia más realista. Este tipo de respuesta táctil permite que los jugadores sientan físicamente varios eventos que ocurren en el juego.

Esta tecnología maximiza la inmersión del jugador, amplifica las respuestas emocionales y enriquece la dinámica del juego. La configuración táctil de los controles de juegos para Android no solo amplía las posibilidades creativas para los desarrolladores de juegos, sino que también les brinda a los jugadores una experiencia de juego más realista que nunca.

fun triggerVibrationMultiChannel(
  deviceId: Int, leftIntensity: Int, leftDuration: Int,
  rightIntensity: Int, rightDuration: Int) {
  val inputDevice = InputDevice.getDevice(deviceId)
  val vibratorManager = inputDevice!!.vibratorManager
  if (vibratorManager != null) {
    val vibratorIds = vibratorManager.vibratorIds
    val vibratorCount = vibratorIds.size
    if (vibratorCount > 0) {
      // We have an assumption that game controllers have two vibrators
      // corresponding to a left motor and a right motor, and the left
      // motor will be first.
      updateVibrator(vibratorManager.getVibrator(vibratorIds[0]), leftIntensity, leftDuration)
      if (vibratorCount > 1) {
        updateVibrator(vibratorManager.getVibrator(vibratorIds[1]), rightIntensity, rightDuration)
      }
    }
  }
}

fun updateVibrator(vibrator: Vibrator?, intensity: Int, duration: Int) {
  if (vibrator != null) {
    if (intensity == 0) {
      vibrator.cancel()
    } else if (duration > 0) {
      vibrator.vibrate(VibrationEffect.createOneShot(duration.toLong(), intensity))
    }
  }
}

Para usar la vibración, se establece una función y un permiso.

<application ...>
  ...
  <uses-feature android:name="android.hardware.gamepad" android:required="true"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  ...
</application>

Obtén más información sobre VibratorManager y el manifiesto de la app.

Sensores de movimiento

Una de las tecnologías más innovadoras que mejoran las experiencias de juego es el control de juegos de Android con sensor de movimiento. Esta tecnología detecta con precisión los movimientos físicos de los usuarios y traduce esos datos en acciones dentro del juego, lo que proporciona una experiencia de juego más intuitiva y envolvente. En esta introducción, exploraremos cómo funcionan las funciones del sensor de movimiento en los controles de juegos de Android.

Por lo general, los sensores de movimiento incorporan giroscopios y acelerómetros para detectar los movimientos y las orientaciones de los usuarios.

Debe implementar clases de objetos de escucha de aceleración y giroscopio, y registrar estos objetos de escucha con el administrador de sensores del control.

fun setIntegratedAccelerometerActive(deviceId: Int) {
  val device = InputDevice.getDevice(deviceId)
  val sensorManager = device?.sensorManager
  val accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
  if (accelerometer != null) {
    val accelerometerListener =
      GameControllerAccelerometerListener(accelerometer)
    sensorManager.registerListener(
      accelerometerListener, accelerometer,
      SensorManager.SENSOR_DELAY_GAME
    )
  }
}

fun setIntegratedGyroscopeActive(deviceId: Int) {
  val device = InputDevice.getDevice(deviceId)
  val sensorManager = device?.sensorManager
  val gyroscope = sensorManager?.getDefaultSensor(Sensor.TYPE_GYROSCOPE)
  if (gyroscope != null) {
    val gyroscopeListener = GameControllerGyroscopeListener(gyroscope)
    sensorManager.registerListener(
      gyroscopeListener, gyroscope,
      SensorManager.SENSOR_DELAY_GAME
    )
  }
}

class GameControllerAccelerometerListener(private val listenerAccelerometer: Sensor?) :
  SensorEventListener {
  override fun onSensorChanged(event: SensorEvent) {
    if (listenerAccelerometer != null) {
      synchronized(listenerAccelerometer) {
        if (event.sensor == listenerAccelerometer) {
          Log.d("Accelerometer",
            "onSensorChanged " + event.values[0] + ", "
            + event.values[1] + ", " + event.values[2])
        }
      }
    }
  }

  override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
  }
}

class GameControllerGyroscopeListener(private val listenerGyroscope: Sensor?) :
  SensorEventListener {
  override fun onSensorChanged(event: SensorEvent) {
    if (listenerGyroscope != null) {
      synchronized(listenerGyroscope) {
        if (event.sensor == listenerGyroscope) {
          Log.d("Gyroscope",
            "onSensorChanged " + event.values[0] + ", " +
            event.values[1] + ", " + event.values[2])
        }
      }
    }
  }

  override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
  }
}

Para obtener más información sobre los sensores de movimiento y SensorEventListener.

Luces

La configuración de color claro de los controles de juegos para Android agrega una nueva dimensión de inmersión al juego a través de elementos visuales.

La función de color de la luz utiliza luces LED integradas en el control para mostrar varios colores, que responden de forma dinámica a diferentes situaciones de juego. Por ejemplo, las luces pueden parpadear en rojo cuando la salud del jugador es crítica o brillar en color verde cuando se completa una misión específica, lo que proporciona información visual en función de los eventos dentro del juego. Estos parámetros de configuración de colores claros profundizan la participación de los usuarios, aumentan el suspenso y el disfrute del juego, y ayudan a los jugadores a sumergirse de manera más profunda en el mundo.

Las funciones de colores claros en los controles de juegos de Android tienen más que un propósito decorativo, ya que desempeñan un papel importante a la hora de crear el ambiente del juego y mejorar la experiencia del usuario.

fun changeControllerLightColor(deviceId: Int, color: Int) {
  val device = InputDevice.getDevice(deviceId)
  device?.let {
    if (it.sources and InputDevice.SOURCE_JOYSTICK == InputDevice.SOURCE_JOYSTICK) {
      val lightsManager = device.lightsManager
      lightsManager?.let { manager ->
        manager.lights.forEach { light ->
          val stateBuilder = LightState.Builder()
          stateBuilder.setColor(color)
          val requestBuilder = LightsRequest.Builder()
          requestBuilder.addLight(light, stateBuilder.build())
          val lightsSession = lightsManager.openSession()
          lightsSession.requestLights(requestBuilder.build())
        }
      }
    }
  }
}

Para usar la vibración, se establece una función y un permiso.

<application ...>
  ...
  <uses-feature android:name="android.hardware.gamepad" android:required="true"/>
  <uses-permission android:name="android.permission.LIGHTS" />
  ...
</application>

Obtén más información sobre LightsManager y el manifiesto de la app.

Panel táctil del control

Algunos controles para juegos incluyen un panel táctil que se puede usar para varias acciones dentro del juego, como navegar por menús o controlar personajes de un juego de manera más intuitiva.

Panel táctil en el control de juegos.
Figura 1: Panel táctil en el control de juegos

Los controles de juegos con paneles táctiles integrados ofrecen control directo de dispositivos en Android. Cuando se toca el panel táctil, se genera un puntero del mouse en la pantalla, lo que permite una navegación intuitiva similar a un mouse.