Przegląd

Kontrolery do gier mają dodatkowe funkcje, które znacznie poprawiają interakcje z graczami i zwiększają ich zaangażowanie. Czujniki haptyczne, czujniki ruchu i funkcje świetlne kontrolerów do gier na Androida odgrywają najważniejszą rolę w pogłębianiu i poprawianiu wrażeń w grach. Każda z nich jednoznacznie stymuluje zmysły gracza, stymulując interakcje w grze bardziej znaczące i intuicyjne interakcje.

Reakcja na dotyk

Funkcja reakcji haptycznych w kontrolerach do gier na Androida to kluczowa technologia, która zapewnia realistyczne wrażenia dotykowe podczas rozgrywki.

Technologia haptyczna dostarcza użytkownikowi doznania fizyczne za pomocą wibracji lub ruchów. Jeśli na przykład w grze dochodzi do eksplozji, kontroler wibruje, dzięki czemu gracz może poczuć realistycznie skutki. Ponadto subtelne wibracje mogą być zsynchronizowane z dźwiękiem idącego lub biegującego postaci, co zapewnia bardziej realistyczne wrażenia. Ten rodzaj reakcji na dotyk sprawia, że gracze mogą poczuć fizyczne wydarzenia odbywające się w grze.

Ta technologia maksymalizuje zaangażowanie graczy, wzmacnia reakcje emocjonalne i wzbogaca dynamikę gry. Ustawienia reakcji na dotyk w kontrolerach do gier na Androida nie tylko rozszerzają możliwości twórcze dla deweloperów gier, ale także zapewniają bardziej realistyczne wrażenia graczy.

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

Aby użyć wibracji, ustawia funkcję i uprawnienia.

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

Dowiedz się więcej o metodach VibratorManager i pliku manifestu aplikacji.

Czujniki ruchu

Jedną z najbardziej innowacyjnych technologii poprawiających wrażenia z rozgrywek jest wyposażony w czujnik ruchu kontroler do gier na Androida. Technologia precyzyjnie wykrywa fizyczne ruchy użytkowników i przekształca te dane w działania w grze, zapewniając bardziej intuicyjną i wciągającą rozgrywkę. W tym wprowadzeniu przyjrzymy się, jak działają czujniki ruchu w kontrolerach do gier na Androida.

Czujniki ruchu zwykle mają żyroskopy i akcelerometry do wykrywania ruchów i orientacji użytkowników.

Musi wdrożyć klasy detektora akceleracji i żyroskopu oraz zarejestrować te detektory za pomocą menedżera czujników kontrolera.

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

Dowiedz się więcej o czujnikach ruchu i SensorEventListener.

światła,

Ustawienia koloru oświetlenia na kontrolerach do gier z Androidem nadają rozgrywce nowy wymiar dzięki elementom wizualnym.

Funkcja kolorów oświetlenia wykorzystuje wbudowane w kontroler diody LED, które wyświetlają różne kolory, dynamicznie dostosowując się do różnych scenariuszy gier. Na przykład diody mogą migać na czerwono, gdy stan zdrowia użytkownika ma kluczowe znaczenie, lub świecić się na zielono po ukończeniu konkretnej misji, zapewniając wizualizację informacji o wydarzeniach w grze. Ustawienia kolorów jasnych kolorów pogłębiają zaangażowanie użytkowników oraz zwiększają napięcie i radość z gry, a także pomagają im w lepszym poznaniu świata gry.

Kolory światła na kontrolerach do gier na Androida mają nie tylko cel dekoracyjny – odgrywają istotną rolę w wyznaczaniu nastroju i poprawianiu wrażeń użytkownika.

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

Aby użyć wibracji, ustawia funkcję i uprawnienia.

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

Dowiedz się więcej o metodach LightsManager i pliku manifestu aplikacji.

Touchpad kontrolera

Niektóre kontrolery do gier są wyposażone w touchpad, który pozwala w bardziej intuicyjny sposób obsługiwać różne działania w grze, np. nawigację po menu czy sterowanie postaciami w grze.

Touchpad kontrolera do gier.
Rysunek 1. Touchpad kontrolera do gier.

Kontrolery do gier ze zintegrowanymi touchpadami umożliwiają bezpośrednie sterowanie urządzeniem z Androidem. Dotknięcie touchpada powoduje wyświetlenie na ekranie wskaźnika myszy, który umożliwia intuicyjną nawigację jak w przypadku myszy.