Tổng quan

Tay điều khiển trò chơi được trang bị thêm các tính năng giúp cải thiện đáng kể khả năng tương tác và sống động của người chơi. Phản hồi xúc giác, cảm biến chuyển động và chức năng ánh sáng của tay điều khiển trò chơi Android đặc biệt đóng vai trò quan trọng trong việc đào sâu và làm phong phú trải nghiệm chơi trò chơi. Mỗi tính năng đều kích thích riêng các giác quan của người chơi, thúc đẩy các hoạt động tương tác trực quan và có ý nghĩa hơn trong trò chơi.

Xúc giác

Tính năng xúc giác trong tay điều khiển trò chơi Android là một công nghệ quan trọng, cung cấp phản hồi xúc giác chân thực trong khi chơi.

Công nghệ xúc giác mang lại các cảm giác vật lý cho người dùng thông qua rung hoặc chuyển động. Ví dụ: khi một vụ nổ xảy ra trong trò chơi, tay điều khiển sẽ rung lên để người chơi cảm nhận được tác động một cách chân thực. Ngoài ra, các hiệu ứng rung nhỏ có thể được đồng bộ hoá với âm thanh của nhân vật đang đi hoặc chạy, mang đến trải nghiệm chân thực hơn. Loại phản hồi xúc giác này giúp người chơi cảm nhận được nhiều sự kiện đang diễn ra trong trò chơi.

Công nghệ này giúp tối đa hoá sự sống động của người chơi, khuếch đại các phản ứng về mặt cảm xúc và làm phong phú thêm tính linh động của trò chơi. Các chế độ cài đặt xúc giác trong tay điều khiển trò chơi Android không chỉ mở rộng khả năng sáng tạo cho nhà phát triển trò chơi mà còn mang lại cho người chơi trải nghiệm chơi thực tế hơn bao giờ hết.

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

Để sử dụng chế độ rung, chế độ này sẽ thiết lập một tính năng và quyền.

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

Để biết thêm thông tin về VibratorManagerTệp kê khai ứng dụng.

Cảm biến chuyển động

Một trong những công nghệ đột phá nhất giúp cải thiện trải nghiệm chơi là tay điều khiển trò chơi Android được trang bị cảm biến chuyển động. Công nghệ này phát hiện chính xác chuyển động thể chất của người dùng và chuyển dữ liệu đó thành các hành động trong trò chơi, mang lại trải nghiệm chơi trò chơi trực quan và sống động hơn. Trong phần giới thiệu này, chúng ta sẽ tìm hiểu cách hoạt động của các tính năng cảm biến chuyển động trong tay điều khiển trò chơi Android.

Cảm biến chuyển động thường tích hợp con quay hồi chuyển và gia tốc kế để phát hiện chuyển động và hướng của người dùng.

Cần triển khai các lớp trình nghe tăng tốc và con quay hồi chuyển, đồng thời đăng ký các trình nghe này với trình quản lý cảm biến của tay điều khiển.

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

Để biết thêm thông tin về Cảm biến chuyển độngSensorEventListener.

Đèn

Chế độ cài đặt màu sáng trên tay điều khiển trò chơi Android giúp tăng thêm một trải nghiệm mới cho người chơi khi chơi trò chơi thông qua các thành phần hình ảnh.

Tính năng màu ánh sáng sử dụng đèn LED tích hợp trong bộ điều khiển để hiển thị nhiều màu sắc, phản hồi linh hoạt với nhiều tình huống chơi trò chơi. Ví dụ: đèn có thể nhấp nháy màu đỏ khi sức khoẻ của người chơi rất nghiêm trọng hoặc sáng màu xanh lục sau khi hoàn thành một nhiệm vụ cụ thể, cung cấp phản hồi bằng hình ảnh dựa trên các sự kiện trong trò chơi. Những chế độ cài đặt màu sáng này giúp tăng cường mức độ tương tác của người dùng, nâng cao sự kịch tính và thích thú cho trò chơi, đồng thời giúp người chơi chìm đắm vào thế giới trò chơi hoàn toàn hơn.

Các tính năng màu sáng trong tay điều khiển trò chơi Android không chỉ đơn thuần là để trang trí. Các tính năng này đóng vai trò quan trọng trong việc thể hiện bầu không khí của trò chơi và cải thiện trải nghiệm người dùng.

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

Để sử dụng chế độ rung, chế độ này sẽ thiết lập một tính năng và quyền.

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

Để biết thêm thông tin về LightsManagerTệp kê khai ứng dụng.

Bàn di chuột của bộ điều khiển

Một số tay điều khiển trò chơi có bàn di chuột có thể dùng cho nhiều hành động trong trò chơi, chẳng hạn như di chuyển trên trình đơn hoặc điều khiển các nhân vật trong trò chơi theo cách trực quan hơn.

Bàn di chuột trên tay điều khiển trò chơi.
Hình 1. Bàn di chuột trên tay điều khiển trò chơi.

Tay điều khiển trò chơi có bàn di chuột tích hợp giúp bạn điều khiển thiết bị trực tiếp trên Android. Thao tác chạm vào bàn di chuột sẽ tạo ra một con trỏ chuột trên màn hình, cho phép điều hướng trực quan giống như chuột.