TV oyunları oluşturma

Televizyon ekranı, mobil oyun geliştiricileri için yeni olabilecek bazı hususlar sunar. Bu alanlar arasında büyük boyutu, kontrol şeması ve tüm oyuncuların aynı anda görüntülemesi yer alır.

Ekran

TV ekranı için oyun geliştirirken göz önünde bulundurmanız gereken iki ana unsur, oyununuzu yatay yön için tasarlamak ve düşük gecikme süresi desteği sunmaktır.

Yatay ekran desteği

TV her zaman yataydır: TV'yi döndüremezsiniz ve dikey yönlendirme yoktur. TV oyunlarınızı her zaman yatay modda gösterilecek şekilde tasarlayın.

Otomatik düşük gecikme modu

Bazı ekranlar, grafik son işleme gerçekleştirebilir. Bu işlem sonrası, grafik kalitesini artırır ancak gecikmeyi de artırabilir. HDMI 2.1'i destekleyen daha yeni ekranlarda, bu son işlemeyi kapatarak gecikmeyi en aza indiren otomatik düşük gecikme modu (ALLM) bulunur. ALLM hakkında daha fazla bilgi için HDMI 2.1 spesifikasyonuna bakın. Diğer ekranlar, benzer davranışa sahip bir oyun modunu destekleyebilir.

Android 11 ve sonraki sürümlerde bir pencere, minimum işlem sonrası isteğinde bulunarak otomatik düşük gecikme modunun veya oyun modunun (varsa) kullanılmasını isteyebilir. Bu, özellikle mümkün olan en iyi grafiklere sahip olmaktan daha önemli olan düşük gecikme süresinin önemli olduğu oyun ve video konferans uygulamaları için kullanışlıdır.

Minimum işlem sonrası özelliğini etkinleştirmek veya devre dışı bırakmak için Window.setPreferMinimalPostProcessing() yöntemini çağırın ya da pencerenin preferMinimalPostProcessing özelliğini true olarak ayarlayın. Tüm ekranlar minimum işlem sonrası desteği sunmaz. Belirli bir ekranın bu desteği sunup sunmadığını öğrenmek için Display.isMinimalPostProcessingSupported() yöntemini çağırın.

Giriş cihazları

TV'lerde dokunma arayüzleri yoktur. Bu nedenle, kontrollerinizi doğru ayarlamanız ve oyuncuların bunları sezgisel ve eğlenceli bulmasını sağlamanız daha da önemlidir. Kumandaları kullanmak, birden fazla kumandayı takip etme ve bağlantı kesintilerini düzgün bir şekilde yönetme gibi dikkat edilmesi gereken başka sorunlara da yol açar. Oyunlar da dahil olmak üzere tüm TV uygulamaları, kumandaları tutarlı bir şekilde işlemelidir. TV kumandalarını kullanma hakkında daha fazla bilgi için TV kumandalarını yönetme, oyunlar için TV kumandalarını kullanma hakkında ayrıntılı bilgi için Oyunlar için kumandaları kullanma başlıklı makaleyi okuyun.

Klavye düzenleri

Android 13 (API düzeyi 33) ve sonraki sürümlerde klavye düzenlerini getKeyCodeForKeyLocation() kullanarak belirleyebilirsiniz. Örneğin, oyununuz WASD tuşlarını kullanarak hareketi destekliyor ancak bu, A ve W tuşlarının farklı konumlarda olduğu bir AZERTY klavyede doğru şekilde çalışmayabilir. Belirli konumlarda beklediğiniz tuşların tuş kodlarını alabilirsiniz:

Kotlin

val inputManager: InputManager? = requireActivity().getSystemService()

inputManager?.inputDeviceIds?.map { inputManager.getInputDevice(it) }
    ?.firstOrNull { it?.keyboardType == InputDevice.KEYBOARD_TYPE_ALPHABETIC }
    ?.let { inputDevice ->
        keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W)
        keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A)
        keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S)
        keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D)
    }

Java

InputManager inputManager = requireActivity().getSystemService(InputManager.class);
InputDevice inputDevice = Arrays.stream(inputManager.getInputDeviceIds())
        .mapToObj(inputManager::getInputDevice)
        .filter( device -> device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC)
        .filter(Objects::nonNull)
        .findFirst()
        .orElse(null);
if (inputDevice != null) {
    keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W);
    keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A);
    keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S);
    keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D);
}

Bu örnekte, AZERTY klavye ile keyUp, KeyEvent.KEYCODE_Z olarak, keyLeft, KeyEvent.KEYCODE_Q olarak, keyDown ve keyRight ise sırasıyla KeyEvent.KEYCODE_S ve KeyEvent.KEYCODE_D olarak ayarlanmıştır. Artık bu tuş kodları için önemli etkinlik işleyiciler oluşturabilir ve beklenen davranışı uygulayabilirsiniz.

Bildirim

Oyunların Android manifest dosyasına eklemesi gereken bazı özel öğeler vardır.

Oyununuzu ana ekranda gösterme

Android TV ana ekranında oyunlar, normal uygulamalardan ayrı bir satırda gösterilir. Oyununuzun oyunlar listesinde görünmesi için uygulama manifest dosyanızın <application> etiketinde android:isGame özelliğini "true" olarak ayarlayın. Örneğin:

<application
    ...
    android:isGame="true"
    ...
>

Oyun kumandaları için destek beyan etme

Oyun kumandaları, TV cihazı kullanıcıları için kullanılamayabilir veya etkin olmayabilir. Kullanıcıları, oyununuzun oyun kumandası desteklediği konusunda doğru şekilde bilgilendirmek için uygulama manifestinize aşağıdaki girişi eklemeniz gerekir:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

Not: android.hardware.gamepad desteğini belirtirken oyununuz standart bir TV uzaktan kumandasıyla (D-pad) da oynanabiliyorsa android:required özelliğini "false" olarak ayarlayın. android:required değerini yalnızca oyununuzu oynamak için oyun kumandası gerekiyorsa "true" olarak ayarlayın. android:required="true" ayarı, Android TV için Google Play'de TV cihazlarına yüklemeyi engellemek yerine "Oyun kumandası gerekli" rozeti ve ön yükleme uyarısı gösterir.

Manifest girişleri hakkında daha fazla bilgi için Uygulama manifesti başlıklı makaleyi inceleyin.

Google Play oyun hizmetleri

Oyununuz Google Play Games Hizmetleri'ni entegre ediyorsa başarılar, oturum açma ve Kaydedilmiş Oyunlar ile ilgili bazı noktaları göz önünde bulundurmanız gerekir.

Başarılar

Oyununuzda en az beş (kazanılabilir) başarı bulunmalıdır. Yalnızca desteklenen bir giriş cihazından oyunu kontrol eden kullanıcılar başarı kazanabilmelidir. Başarılar ve bunları nasıl uygulayacağınız hakkında daha fazla bilgi için Android'de Başarılar başlıklı makaleyi inceleyin.

Oturum açma

Oyununuz, başlatıldığında kullanıcının oturumunu açmaya çalışmalıdır. Oyuncu arka arkaya birkaç kez oturum açmayı reddederse oyununuz sormayı bırakmalıdır. Oturum açma hakkında daha fazla bilgi için Android'de oturum açma özelliğini uygulama başlıklı makaleyi inceleyin.

Kaydediliyor

Oyun kaydınızı depolamak için Google Play Hizmetleri Kaydedilmiş Oyunlar'ı kullanın. Oyununuz, oyun kayıtlarını belirli bir Google Hesabı'na bağlamalıdır. Böylece, cihazlar arasında bile kimliği net bir şekilde tespit edilebilir: Oyuncu ister mobil telefon ister TV kullansın, oyun, oyun kayıt bilgilerini aynı kullanıcı hesabından çekebilmelidir.

Ayrıca oyununuzun kullanıcı arayüzünde, oyuncunun yerel olarak ve bulutta depolanan verileri silmesine olanak tanıyan bir seçenek sunmanız gerekir. Seçeneği oyunun Settings ekranına yerleştirebilirsiniz. Play Hizmetleri'ni kullanarak kaydedilmiş oyunları uygulama hakkında ayrıntılı bilgi için Android'de Kaydedilmiş Oyunlar başlıklı makaleyi inceleyin.

Çıkış

Kullanıcının oyundan sorunsuz bir şekilde çıkmasını sağlayan tutarlı ve belirgin bir kullanıcı arayüzü öğesi sunun. Bu öğeye d-pad gezinme düğmeleriyle erişilebilmelidir. Çıkış için ana sayfa düğmesine güvenmek yerine bu yöntemi kullanın. Ana sayfa düğmesi, farklı kumandalarda tutarlı veya güvenilir bir şekilde çalışmaz.

Web

Android TV oyunlarında web tarayıcısını etkinleştirmeyin. Android TV, web tarayıcılarını desteklemez.

Not: Sosyal medya hizmetlerine giriş yapmak için WebView sınıfını kullanabilirsiniz.

Ağ İletişimi

Oyunlar, optimum performans sağlamak için genellikle daha fazla bant genişliğine ihtiyaç duyar ve birçok kullanıcı bu performansı sağlamak için kablosuz bağlantı yerine Ethernet'i tercih eder. Uygulamanız hem kablosuz hem de Ethernet bağlantılarını kontrol etmelidir. Uygulamanız yalnızca TV içinse mobil uygulamalarda olduğu gibi 3G/LTE hizmetini kontrol etmeniz gerekmez.