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.