Genel bakış

Oyun kumandaları, oyun kumandaları arasında önemli düzeyde oyuncu etkileşimini ve sürükleyiciliği artırır. Dokunma teknolojisi, hareket sensörleri ve ışık özellikleri, özellikle de Android oyun kumandalarının oyun deneyimini derinleştiriyor ve zenginleştiriyoruz. Her özellik benzersiz bir şekilde oyuncunun duyularını güçlendirerek oyun içinde daha anlamlı ve sezgisel etkileşimler sorumluluklar var.

Dokunma teknolojisi

Android oyun kumandalarındaki dokunma teknolojisi özelliği, Oyun sırasında dokunsal olarak gerçekçi geri bildirimler sağlar.

Dokunma teknolojisi teknolojisi, kullanıcıya titreşimler aracılığıyla fiziksel duyuları verir içeren bir grafiktir. Örneğin, oyunda bir patlama olduğunda kumanda, titreşerek oyuncunun etkiyi gerçekçi bir şekilde hissetmesini sağlar. Ayrıca, hafif titreşimler, yürüyen bir karakterin sesiyle veya daha gerçekçi bir deneyim sunuyor. Bu tür dokunsal geribildirim Oyuncuların oyunda çeşitli etkinlikleri fiziksel olarak hissetmelerini sağlar.

Bu teknoloji, oyuncunun ilgisini en üst düzeye çıkarır, duygusal tepkileri güçlendirir ve oyunun dinamiklerini zenginleştiriyor. Android oyun kumandalarında dokunma teknolojisi ayarları yalnızca oyun geliştiricileri için yaratıcı olanaklarını genişletmekle kalmaz, aynı zamanda bir oyun deneyimi yaşatıyor.

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

Titreşimi kullanmak için bir özellik ve izin ayarlar.

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

Daha fazla bilgi için VibratorManager ve Uygulama manifesti.

Hareket sensörleri

Oyun deneyimini geliştiren en yenilikçi teknolojilerden biri hareket sensörüne sahip Android oyun kumandası. Bu teknoloji tamamen Kullanıcıların fiziksel hareketlerini tespit eder ve bu verileri işlemlere dönüştürür oyunda daha sezgisel ve sürükleyici bir oyun deneyimi sunuyor. Bu giriş bölümünde, hareket sensörünün mobil cihazlarda Android oyun kumandaları çalışır.

Hareket sensörleri genellikle hareket sensörünü algılamak için jiroskoplar ve ivme ölçerler ve yönleri ile uyumlu olmalıdır.

İvme ve jiroskop dinleyici derslerini uygulamak ve denetleyicinin sensör yöneticisiyle birlikte çalışır.

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

Daha fazla bilgi için Hareket sensörleri ve SensorEventListener.

Işıklar

Android oyun kumandalarındaki açık renk ayarları, cihazlara yeni bir boyut katar. daha fazla izleyiciye hitap ediyor.

Işık rengi özelliği, aşağıdaki işlemleri yapabilmek için kumandada yerleşik LED ışıkları kullanır: Farklı oyun senaryolarına dinamik olarak yanıt veren çeşitli renkler gösteriyor. Örneğin, oyuncunun sağlığı kritik olduğunda ışıklar kırmızı yanıp sönebilir veya belirli bir görevin tamamlandığında yeşil renkte yanar ve görsel geri bildirim sağlar oyun içi etkinliklere göre. Bu açık rengi ayarları kullanıcı etkileşimini artırır, Oyunun merak ve neşesini artırırken oyuncuların oyuna daha fazla odaklanmalarına yardımcı olun tam anlamıyla kapsıyor.

Android oyun kumandalarındaki açık renk özellikleri, yalnızca dekoratif bir amaca hizmet eder. Oyunun atmosferini belirlemede geliştirmek için çok önemlidir.

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

Titreşimi kullanmak için bir özellik ve izin ayarlar.

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

Daha fazla bilgi için LightsManager ve Uygulama manifesti.

Kumanda dokunmatik alanı

Bazı oyun kumandalarında, çeşitli işlemler için kullanılabilen bir dokunmatik alan bulunur. Örneğin, menülerde gezinme veya oyundaki oyun karakterlerini kontrol etme bir yolunu sunar.

Oyun kumandasındaki dokunmatik alan.
Şekil 1. Oyun kumandasındaki dokunmatik alan.

Entegre dokunmatik alana sahip oyun kumandaları, doğrudan cihaz kontrolü sağlar Android Dokunmatik alana dokunduğunuzda, ekranda bir fare işaretçisi oluşturulur. Bu işaretçi, kullanımı kolay bir fare gibi gezinme olanağı sunuyor.