Panoramica

I controller di gioco dispongono di funzioni aggiuntive che significativamente per migliorare l'interazione e l'assorbimento. Tecnologia aptica, sensori di movimento e luce le funzionalità dei controller di gioco Android sono particolarmente cruciali approfondendo e arricchendo l'esperienza di gioco. Ogni caratteristica stimola in modo unico i sensi del giocatore, promuovendo interazioni più significative e intuitive all'interno al gioco.

Tecnologia aptica

La funzionalità aptica dei controller di gioco Android è una tecnologia fondamentale per offrono un feedback tattile realistico durante il gameplay.

La tecnologia aptica offre sensazioni fisiche all'utente tramite vibrazioni o movimenti. Ad esempio, quando si verifica un'esplosione nel gioco, il controller vibra, consentendo al giocatore di percepire l'impatto in modo realistico. Inoltre, delle leggere vibrazioni possono essere sincronizzate con il suono di un personaggio che cammina o che offre un'esperienza più realistica. Questo tipo di feedback aptico permette ai giocatori di percepire fisicamente i vari eventi che si verificano all'interno del gioco.

Questa tecnologia massimizza la immersività del giocatore, amplifica le risposte emotive e arricchisce le dinamiche del gioco. Impostazioni della tecnologia aptica nei controller di gioco Android non solo amplia le possibilità creative per gli sviluppatori di giochi, ma offre anche con un'esperienza di gioco più realistica che mai.

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

Per usare la vibrazione, vengono impostate una funzionalità e un'autorizzazione.

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

Per ulteriori informazioni VibratorManager e File manifest dell'app.

Sensori di movimento

Una delle tecnologie più innovative che migliorano le esperienze di gameplay è il un controller di gioco Android con sensore di movimento. Questa tecnologia con precisione rileva i movimenti fisici degli utenti e li converte in azioni all'interno del gioco, per un'esperienza di gioco più intuitiva e immersiva. In questa introduzione, vedremo come funziona il sensore di movimento I controller di gioco Android funzionano.

I sensori di movimento di solito incorporano giroscopi e accelerometri per rilevare movimenti e orientamenti degli utenti.

Deve implementare classi ascoltatori di accelerazione e giroscopio e registrare con il gestore dei sensori del controller.

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

Per ulteriori informazioni Sensori di movimento e SensorEventListener

Luci

Le impostazioni del colore della luce sui controller di gioco Android aggiungono una nuova dimensione immersiva al gameplay tramite elementi visivi.

La funzionalità colore della luce utilizza le spie LED integrate nel controller per visualizzare vari colori che rispondono dinamicamente a diversi scenari di gioco. Ad esempio, le spie potrebbero lampeggiare in rosso quando la salute del giocatore è critica oppure si illumina di verde al completamento di una missione specifica, fornendo un feedback visivo in base agli eventi in-game. Queste impostazioni dei colori chiari aumentano il coinvolgimento degli utenti, aumenta la suspense e il divertimento del gioco e aiuta i giocatori a immergersi di più a entrare a far parte del mondo dei giochi.

Le funzioni del colore chiaro nei controller di gioco Android offrono puro scopo decorativo; gioca un ruolo fondamentale nel definire l'atmosfera del gioco e migliorare l'esperienza utente.

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

Per usare la vibrazione, vengono impostate una funzionalità e un'autorizzazione.

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

Per ulteriori informazioni LightsManager e File manifest dell'app.

Touchpad del controller

Alcuni controller di gioco includono un touchpad, che può essere utilizzato per diverse azioni in-game, ad esempio navigare nei menu o controllare i personaggi del gioco in un in modo più intuitivo.

Touchpad sul controller di gioco.
Figura 1. Touchpad sul controller di gioco.

I controller di gioco con touchpad integrati offrono il controllo diretto del dispositivo su Android. Quando si tocca il touchpad viene generato un puntatore del mouse sullo schermo, consentendo per una navigazione intuitiva come con un mouse.