Ringkasan

Pengontrol game dilengkapi fitur tambahan yang secara signifikan meningkatkan interaksi pemain dan imersif. Haptic, sensor gerakan, dan fungsi cahaya pengontrol game Android sangat berperan dalam memperdalam dan memperkaya pengalaman bermain game. Setiap fitur secara unik merangsang indra pemain, mendorong interaksi yang lebih bermakna dan intuitif di dalam game.

Sentuhan

Fitur haptic di pengontrol game Android adalah teknologi penting yang memberikan respons taktil yang realistis selama gameplay.

Teknologi haptics memberikan sensasi fisik kepada pengguna melalui getaran atau gerakan. Misalnya, saat ada ledakan di game, pengontrol akan bergetar, sehingga pemain dapat merasakan dampaknya secara realistis. Selain itu, getaran halus dapat disinkronkan dengan suara karakter berjalan atau berlari, menawarkan pengalaman yang lebih realistis. Respons haptik jenis ini memungkinkan pemain secara fisik merasakan berbagai peristiwa yang terjadi dalam game.

Teknologi ini memaksimalkan keseruan pemain, memperkuat respons emosional, dan memperkaya dinamika game. Setelan haptic di pengontrol game Android tidak hanya memperluas kemungkinan kreatif bagi developer game, tetapi juga memberi pemain pengalaman bermain yang lebih realistis daripada sebelumnya.

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

Untuk menggunakan getar, fitur ini menetapkan fitur dan izin.

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

Untuk mengetahui informasi selengkapnya tentang VibratorManager dan Manifes aplikasi.

Sensor gerakan

Salah satu teknologi paling inovatif yang meningkatkan pengalaman gameplay adalah pengontrol game Android yang dilengkapi sensor gerakan. Teknologi ini secara akurat mendeteksi gerakan fisik pengguna dan menerjemahkan data tersebut menjadi tindakan dalam game, sehingga memberikan pengalaman bermain game yang lebih intuitif dan imersif. Dalam pengantar ini, kita akan mempelajari cara kerja fitur sensor gerakan di pengontrol game Android.

Sensor gerakan biasanya menggabungkan giroskop dan akselerometer untuk mendeteksi gerakan dan orientasi pengguna.

Aplikasi perlu menerapkan class pemroses akselerasi dan giroskop serta mendaftarkan pemroses ini dengan pengelola sensor pengontrol.

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

Untuk mengetahui informasi selengkapnya tentang Sensor gerakan dan SensorEventListener.

Lampu

Setelan warna terang di pengontrol game Android menambahkan dimensi baru yang imersif ke gameplay melalui elemen visual.

Fitur warna lampu menggunakan lampu LED bawaan di pengontrol untuk menampilkan berbagai warna, yang secara dinamis merespons berbagai skenario game. Misalnya, lampu mungkin berkedip merah saat kesehatan pemain sangat penting, atau bersinar hijau setelah menyelesaikan misi tertentu, yang memberikan masukan visual berdasarkan peristiwa dalam game. Setelan warna terang ini memperdalam engagement pengguna, meningkatkan ketegangan dan kenikmatan game, serta membantu pemain menikmati dunia game secara lebih maksimal.

Fitur warna terang di pengontrol game Android tidak hanya untuk tujuan dekoratif, tetapi juga berperan penting dalam mengatur mood game dan meningkatkan pengalaman pengguna.

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

Untuk menggunakan getar, fitur ini menetapkan fitur dan izin.

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

Untuk mengetahui informasi selengkapnya tentang LightsManager dan Manifes aplikasi.

Touchpad pengontrol

Beberapa pengontrol game menyertakan touchpad yang dapat digunakan untuk berbagai tindakan dalam game, seperti membuka menu atau mengontrol karakter game dengan cara yang lebih intuitif.

Touchpad di pengontrol game.
Gambar 1. Touchpad di pengontrol game.

Pengontrol game dengan touchpad terintegrasi menawarkan kontrol perangkat langsung di Android. Menyentuh touchpad akan menghasilkan pointer mouse di layar, sehingga memungkinkan navigasi seperti mouse yang intuitif.