TV oyunları oluşturma

Televizyon ekranı, mobil oyun geliştiricileri için yeni olabilecek bir dizi hususu gündeme getirir. 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 temel husus vardır: Oyununuzu yatay yönde tasarlamak ve düşük gecikmeye destek sunmaktır.

Yatay ekranı destekle

TV her zaman yataydır: Döndüremezsiniz ve dikey yönde görüntü alamazsınız. TV oyunlarınızı her zaman yatay modda gösterilecek şekilde tasarlayın.

Otomatik düşük gecikme modu

Belirli ekranlar grafik son işleme gerçekleştirebilir. Bu son işlem, grafik kalitesini iyileştirir ancak gecikmeyi artırabilir. HDMI 2.1'i destekleyen yeni ekranlarda, bu son işleme işlemini kapatarak gecikmeyi en aza indiren bir otomatik düşük gecikme modu (ALLM) bulunur. ALLM ile ilgili 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 son işlem isteğinde bulunarak otomatik düşük gecikmeli modun veya oyun modunun (varsa) kullanılmasını isteyebilir. Bu özellik, özellikle düşük gecikmenin mümkün olan en iyi grafiklere sahip olmaktan daha önemli olduğu oyun ve video konferans uygulamaları için faydalıdır.

Minimum işleme 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 son işleme özelliğini desteklemez. Belirli bir ekranın bu özelliği destekleyip desteklemediğini öğrenmek için Display.isMinimalPostProcessingSupported() yöntemini çağırın.

Giriş cihazları

TV'lerde dokunmatik arayüz olmadığından, kontrollerinizi doğru şekilde belirlemek ve oyuncuların bunları sezgisel ve eğlenceli bulmasını sağlamak daha da önemlidir. Denetleyicileri yönetmek, birden fazla denetleyiciyi takip etme ve bağlantıyı düzgün bir şekilde yönetme gibi dikkat edilmesi gereken başka sorunlar da ortaya çıkarır. Oyunlar dahil tüm TV uygulamaları, kumandayı tutarlı bir şekilde işlemelidir. TV kumandalarını kullanma hakkında daha fazla bilgi için TV kumandalarını yönetme başlıklı makaleyi, TV kumandalarını oyunlarda kullanma hakkında daha fazla bilgi için Oyun kumandaları ile ilgili işlemleri yapma başlıklı makaleyi okuyun.

Klavye düzenleri

Android 13 (API düzeyi 33) ve sonraki sürümlerde getKeyCodeForKeyLocation() kullanarak klavye düzenlerini belirleyebilirsiniz. Örneğin, oyununuz WASD tuşlarını kullanarak hareket etmeyi destekliyor olabilir ancak bu, A ve W tuşları farklı konumlarda olan bir AZERTY klavyesinde düzgün çalışmayabilir. Belirli konumlarda olmasını 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 klavyesinde keyUp KeyEvent.KEYCODE_Z, keyLeft KeyEvent.KEYCODE_Q, keyDown ve keyRight ise sırasıyla KeyEvent.KEYCODE_S ve KeyEvent.KEYCODE_D olarak ayarlanmıştır. Artık bu önemli kodlar için önemli etkinlik işleyicileri oluşturabilir ve beklenen davranışı uygulayabilirsiniz.

Manifest

Android manifest dosyasında oyunların içermesi gereken bazı özel şeyler var.

Oyununuzu ana ekranda gösterme

Android TV ana ekranında, oyunlar normal uygulamalardan ayrı bir satırda gösterilir. Oyununuzun oyun listesinde görünmesini sağlamak için uygulama manifestinizin <application> etiketinde android:isGame özelliğini "true" olarak ayarlayın. Örnek:

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

Oyun denetleyicileri için destek beyan etme

Oyun kontrol cihazları, TV cihazı kullanıcıları tarafından kullanılamayabilir veya etkin olmayabilir. Kullanıcıları oyununuzun oyun kumandasını desteklediğini 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 android:required özelliğini "true" olarak ayarlamayın. Bunu yaparsanız kullanıcılar uygulamanızı TV cihazlarına yükleyemez.

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

Google Play oyun hizmetleri

Oyununuzda Google Play Games Hizmetleri entegre edilmişse başarılar, oturum açma ve oyunları kaydetme ile ilgili bazı hususları 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 bir kullanıcı başarıları kazanabilmelidir. Başarılar ve bunların nasıl uygulanacağı hakkında daha fazla bilgi için Android'de Başarılar başlıklı makaleyi inceleyin.

Oturum açma

Oyununuz, başlatılırken kullanıcının oturum açmasını denemelidir. Oyuncu art arda birkaç kez oturum açmayı reddederse oyununuz bunu sormayı bırakmalıdır. Oturum açma hakkında daha fazla bilgiyi Android'de oturum açma özelliğini uygulama başlıklı makalede bulabilirsiniz.

Kaydediliyor

Oyun kaydınızı depolamak için Google Play Hizmetleri Kayıtlı Oyunlar'ı kullanın. Oyununuz, oyun kayıtlarını belirli bir Google Hesabı'na bağlayarak cihazlar arasında bile benzersiz şekilde tanımlanabilir olmalıdır: Oyuncu cep telefonu veya TV kullanıyor olsun, oyun kayıt bilgilerini aynı kullanıcı hesabından almalıdır.

Ayrıca, oyununuzun kullanıcı arayüzünde, oyuncunun yerel ve bulutta depolanan verileri silebilmesi için bir seçenek sunmalısınız. Bu seçeneği oyunun Settings ekranına yerleştirebilirsiniz. Play Hizmetleri'ni kullanarak kayıtlı oyunları uygulamayla ilgili ayrıntılı bilgi için Android'de Kayıtlı 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 sağlayın. Bu öğeye D-pad gezinme düğmeleriyle erişilebilmelidir. Çıkış yapmak için ana sayfa düğmesine güvenmek yerine bunu yapın. Bu düğme, farklı kumandalarda tutarlı ve güvenilir değildir.

Web

Android TV için oyunlarda web tarayıcısını etkinleştirmeyin. Android TV, web tarayıcısını desteklemez.

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

Ağ Ürünleri

Oyunlar, optimum performansı sağlamak için genellikle daha yüksek bant genişliğine ihtiyaç duyar ve pek çok kullanıcı bu performansı sağlamak için ethernet'i kablosuz ağa tercih eder. Uygulamanız hem kablosuz hem de Ethernet bağlantılarını kontrol etmelidir. Uygulamanız yalnızca TV içinse mobil uygulamada yaptığınız gibi 3G/LTE hizmetini kontrol etmeniz gerekmez.