Televizyon ekranı, mobil oyun geliştiricileri için yeni olabilecek bazı noktaları beraberinde 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 ana nokta, oyununuzu yatay yönde tasarlamak ve düşük gecikme süresi için destek sağlamaktır.
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
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 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 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 son işlemeyi desteklemez. Belirli bir ekranın bunu 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. 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, 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, 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 tuş etkinliği işleyicileri 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ı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ğ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ı, TV cihazlarına yüklemeyi engellemek yerine Google Play for Android TV'de "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 ile entegre edilmişse 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ı olmalıdır. Yalnızca desteklenen bir giriş cihazından oyunu kontrol eden kullanıcılar başarı 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ıldığında kullanıcının oturumunu açmaya çalışmalıdır. Oyuncu birkaç kez üst üste oturum açmayı reddederse oyununuz sormayı 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'nin Kaydedilmiş Oyunlar özelliğini 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üğmesini kullanmak yerine bu yöntemi uygulayın. Ana sayfa düğmesi, farklı kumandalarda tutarlı ve güvenilir bir çıkış yöntemi değildir.
Web
Android TV'de oyunlarda web'de gezinmeyi 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ğ İ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 ağ 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.