TV oyunları oluşturma

Televizyon ekranı, mobil oyun geliştiriciler için yeni olabilecek bir dizi önemli nokta sunar. Bu alanlar arasında büyük boyutu, kontrol şeması ve tüm oyuncuların aynı anda izlemesi yer alır.

Ekran

TV ekranı için oyun geliştirirken göz önünde bulundurmanız gereken iki temel nokta vardır: oyununuzu yatay yönde tasarlamak ve düşük gecikme süresi desteği sağlamak.

Yatay ekran desteği

TV'ler her zaman yan durur: 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

Belirli ekranlar, grafiklerin sonradan işlenmesini gerçekleştirebilir. Bu son işlem, grafik kalitesini artırır ancak gecikmeyi artırabilir. HDMI 2.1'i destekleyen yeni ekranlarda, bu son işlemeyi kapatarak gecikmeyi en aza indiren bir 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 son işlemeyi isteyerek varsa otomatik düşük gecikme modu veya oyun modunun kullanılmasını isteyebilir. Bu özellik, özellikle mümkün olan en iyi grafiklere sahip olmaktan daha çok düşük gecikme süresinin önemli olduğu oyun ve video konferans uygulamalarında kullanışlıdır.

Minimum son işlemeyi etkinleştirmek veya devre dışı bırakmak için Window.setPreferMinimalPostProcessing() işlevini çağırın ya da pencerenin preferMinimalPostProcessing özelliğini true olarak ayarlayın. Bazı ekranlar minimum son işlemeyi 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üzler bulunmadığından kontrollerinizi doğru şekilde ayarlamanız ve oyuncuların bu kontrolleri sezgisel ve eğlenceli bulmasını sağlamanız daha da önemlidir. Denetleyicilerin yönetimi, birden fazla denetleyiciyi takip etme ve bağlantı kesilmelerini sorunsuz bir şekilde yönetme gibi dikkat edilmesi gereken başka sorunları da beraberinde getirir. 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, oyunlarda TV kumandalarını kullanma hakkında bilgi için ise Oyun kumandalarını kullanma başlıklı makaleyi inceleyin.

Klavye düzenleri

Android 13 (API düzeyi 33) ve sonraki sürümlerde klavye düzenlerini getKeyCodeForKeyLocation() kullanarak belirleyebilirsiniz. Örneğin, oyununuzda hareket için WASD tuşları kullanılıyor ancak A ve W tuşlarının farklı yerlerde bulunduğu AZERTY klavyelerde bu tuşlar 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 klavyede 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şleyicileri oluşturabilir ve beklenen davranışı uygulayabilirsiniz.

Manifest

Oyunların Android manifest dosyasına eklemesi gereken bazı özel şeyler vardır.

Oyununuzu ana ekranda gösterme

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

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

Oyun denetleyicileri 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ını 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ği 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ı makaleye bakın.

Google Play oyun hizmetleri

Oyununuz Google Play Games Hizmetleri ile entegre edilmişse başarılar, oturum açma ve oyunları kaydetme ile ilgili bazı noktaları göz önünde bulundurmanız gerekir.

Başarılar

Oyununuzda en az beş (kazanılabilir) başarı olmalıdır. Yalnızca desteklenen bir giriş cihazından oynanışı kontrol eden kullanıcılar başarı kazanabilir. 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ıldığında kullanıcının oturumunu açmaya çalışmalıdır. Oyuncu, oturum açma isteğini art arda birkaç kez reddederse oyununuz bu isteği göstermeyi bırakmalıdır. Oturum açma hakkında daha fazla bilgiyi Android'de oturum açmayı uygulama başlıklı makalede bulabilirsiniz.

Kaydediliyor

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

Ayrıca, oyuncunun yerel olarak ve bulutta depolanan verileri silmesine olanak tanıyan bir seçeneği oyununuzun kullanıcı arayüzünde 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ı ve güvenilir değildir.

Web

Android TV'de oyunlarda web'e göz atmayı 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 fazla bant genişliğine ihtiyaç duyar ve birçok kullanıcı bu performansı sağlamak için kablosuz yerine Ethernet'i tercih eder. Uygulamanız hem kablosuz hem de Ethernet bağlantılarını kontrol etmelidir. Uygulamanız yalnızca TV'ye yönelikse mobil uygulamalarda olduğu gibi 3G/LTE hizmetini kontrol etmeniz gerekmez.