Présentation

Les manettes de jeu sont équipées de fonctionnalités supplémentaires qui améliorent considérablement l'interaction et l'immersion des joueurs. Les technologies haptiques, les capteurs de mouvement et les fonctionnalités de luminosité des manettes de jeu Android sont particulièrement déterminantes pour approfondir et enrichir l'expérience de jeu. Chaque fonctionnalité stimule les sens du joueur de façon unique, en favorisant des interactions plus significatives et intuitives dans le jeu.

Technologies haptiques

La fonctionnalité haptique des manettes de jeu Android est une technologie essentielle qui fournit un retour tactile réaliste pendant le jeu.

La technologie haptique transmet des sensations physiques à l'utilisateur par le biais de vibrations ou de mouvements. Par exemple, lorsqu'une explosion se produit dans le jeu, la manette vibre, ce qui permet au joueur de ressentir l'impact de manière réaliste. De plus, des vibrations subtiles peuvent être synchronisées avec le son d'un personnage qui marche ou court, offrant ainsi une expérience plus réaliste. Ce type de retour haptique permet aux joueurs de ressentir physiquement divers événements dans le jeu.

Cette technologie maximise l'immersion du joueur, amplifie les réactions émotionnelles et enrichit la dynamique du jeu. Les paramètres haptiques des manettes de jeu Android élargissent non seulement les possibilités créatives aux développeurs de jeux, mais offrent également aux joueurs une expérience de jeu plus réaliste que jamais.

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))
    }
  }
}

Pour utiliser le vibreur, une fonctionnalité et une autorisation sont définies.

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

En savoir plus sur VibratorManager et le fichier manifeste d'application

Capteurs de mouvement

La manette de jeu Android équipée d'un capteur de mouvement est l'une des technologies les plus innovantes qui améliorent l'expérience de jeu. Cette technologie détecte avec précision les mouvements physiques des utilisateurs et traduit ces données en actions dans le jeu, offrant ainsi une expérience de jeu plus intuitive et immersive. Dans cette introduction, nous allons découvrir le fonctionnement des fonctionnalités de détection de mouvement des manettes de jeu Android.

Les capteurs de mouvement intègrent généralement des gyroscopes et des accéléromètres pour détecter les mouvements et l'orientation des utilisateurs.

Elle doit implémenter les classes d'écouteurs d'accélération et de gyroscope, et enregistrer ces écouteurs avec le gestionnaire de capteurs de la manette.

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) {
  }
}

En savoir plus sur les capteurs de mouvement et SensorEventListener

Ampoules

Les paramètres de couleur de la lumière sur les manettes de jeu Android ajoutent une nouvelle dimension d'immersion au jeu par le biais d'éléments visuels.

La fonctionnalité de couleur de la lumière utilise des voyants LED intégrés dans la manette pour afficher différentes couleurs, qui réagissent de manière dynamique à différents scénarios de jeu. Par exemple, les voyants peuvent clignoter en rouge lorsque la santé du joueur est critique ou s'allumer en vert à la fin d'une mission spécifique, fournissant ainsi un retour visuel basé sur les événements dans le jeu. Ces paramètres de couleur claire renforcent l'engagement des utilisateurs, renforcent le suspense et le plaisir du jeu, et aident les joueurs à s'immerger pleinement dans l'univers du jeu.

Les fonctionnalités de couleur claire des manettes de jeu Android ont plus qu'un rôle décoratif. Elles jouent un rôle important dans la création de l'ambiance du jeu et l'amélioration de l'expérience utilisateur.

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())
        }
      }
    }
  }
}

Pour utiliser le vibreur, une fonctionnalité et une autorisation sont définies.

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

En savoir plus sur LightsManager et le fichier manifeste d'application

Pavé tactile de la manette

Certaines manettes de jeu comprennent un pavé tactile qui permet d'effectuer diverses actions dans le jeu, comme naviguer dans les menus ou contrôler les personnages de manière plus intuitive.

Pavé tactile de la manette de jeu.
Figure 1. Pavé tactile de la manette de jeu.

Les manettes de jeu avec pavés tactiles intégrés permettent de contrôler directement l'appareil sur Android. Le fait d'appuyer sur le pavé tactile génère un pointeur de souris à l'écran, ce qui permet une navigation intuitive semblable à celle d'une souris.