Informações gerais

Os controles de jogos têm recursos adicionais que aumentam significativamente para melhorar a interação e a imersão dos jogadores. Retorno tátil, sensores de movimento e iluminação funcionalidades dos controles de jogos do Android são particularmente fundamentais aprofundando e enriquecendo a experiência de jogo. Cada recurso estimula uma forma única sentidos do jogador, promovendo interações mais significativas e intuitivas dentro o jogo.

Retorno tátil

O recurso de retorno tátil nos controles de jogos do Android é uma tecnologia crucial que oferece feedback tátil realista durante o jogo.

A tecnologia tátil fornece sensações físicas ao usuário por meio de vibrações ou movimentos. Por exemplo, quando ocorre uma explosão no jogo, o controle vibra, permitindo que o jogador sinta o impacto de maneira realista. Além disso, vibrações sutis podem ser sincronizadas com o som de um personagem caminhando ou corrida, oferecendo uma experiência mais realista. Esse tipo de retorno tátil permite que os jogadores sintam fisicamente os vários eventos acontecendo no jogo.

Essa tecnologia maximiza a imersão dos jogadores, amplifica as respostas emocionais e enriquece a dinâmica do jogo. Configurações de retorno tátil nos controles de jogos do Android não só ampliam as possibilidades criativas para os desenvolvedores de jogos, mas também fornecem usuários com uma experiência mais realista do 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 a vibração, ele define um recurso e uma permissão.

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

Para mais informações sobre VibratorManager e Manifesto do app.

Sensores de movimento

Uma das tecnologias mais inovadoras que aprimoram as experiências de jogabilidade é o com sensor de movimento do Android. Essa tecnologia precisa detecta os movimentos físicos dos usuários e converte esses dados em ações dentro do jogo, proporcionando uma experiência mais intuitiva e imersiva. Nesta introdução, exploraremos como o sensor de movimento funciona os controles de jogo do Android funcionam.

Os sensores de movimento normalmente incorporam giroscópios e acelerômetros para detectar movimentos e orientações dos usuários.

Ele precisa implementar classes de aceleração e de ouvinte do giroscópio e registrar esses listeners com o gerenciador de sensores do controlador.

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 mais informações sobre Sensores de movimento e SensorEventListener.

Luzes

As configurações de cor clara nos controles de jogos do Android adicionam uma nova dimensão de imersão na jogabilidade por meio de elementos visuais.

O recurso de cor da luz usa luzes de LED integradas no controle para exibem várias cores, que respondem dinamicamente a diferentes cenários de jogo. Por exemplo, as luzes podem piscar em vermelho quando a saúde do jogador for crítica ou brilha em verde após a conclusão de uma missão específica, fornecendo feedback visual com base nos eventos do jogo. Essas configurações de cor clara aumentam o engajamento do usuário, aumentar o suspense e a diversão do jogo e ajudar os jogadores a mergulhar mais para o mundo dos jogos.

As características de cor clara nos controles de jogos do Android atendem a mais de um meramente decorativo, porque desempenha um papel significativo na definição do clima da e melhorando a experiência do usuário.

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 a vibração, ele define um recurso e uma permissão.

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

Para mais informações sobre LightsManager e Manifesto do app.

Touchpad do controle

Alguns controles de jogos incluem um touchpad que pode ser usado para vários ações no jogo, como navegar em menus ou controlar personagens em um mais intuitiva.

Touchpad no controle de jogos.
Figura 1. Touchpad no controle de jogos.

Controles de jogos com touchpads integrados oferecem controle direto do dispositivo em Android Tocar no touchpad gera um ponteiro do mouse na tela, permitindo para uma navegação intuitiva parecida com mouse.