TV oyunları oluşturma

Televizyon ekranında, mobil oyun geliştiriciler için yeni olabilecek bir dizi nokta göz önünde bulundurulur. Bu alanlar arasında aracın büyük boyutu, kontrol şeması ve tüm oyuncuların aynı anda görüntülemesi yer alıyor.

Ekran

TV ekranına yönelik oyunlar geliştirirken unutulmaması gereken iki önemli husus, oyununuzu yatay yön için tasarlar ve düşük gecikme desteği sağlar.

Yatay ekranı destekle

Televizyon her zaman yan durmaktadır: Döndürülemez ve cihazın dikey yönü yoktur. TV oyunlarınızı her zaman yatay modda görüntülenecek şekilde tasarlayın.

Otomatik düşük gecikme modu

Belirli ekranlarda, grafiklerin son işlenmesi gerçekleştirilebilir. Bu işlem sonrası işlem grafik kalitesini iyileştirir ancak gecikmeyi 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 teknik özelliklerine bakın. Diğer ekranlar, benzer davranışa sahip oyun modunu destekleyebilir.

Android 11 ve sonraki sürümlerde bir pencere, minimum son işleme yöntemini isteyerek otomatik düşük gecikme modunun veya oyun modunun (varsa) kullanılmasını isteyebilir. Bu özellik, düşük gecikmenin mümkün olan en iyi grafiğe sahip olmaktan daha önemli olduğu oyun ve video konferans uygulamaları için özellikle faydalıdır.

Minimum düzeyde son işlemeyi 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 sonra işlemeyi desteklemez. Belirli bir ekranın bunu destekleyip desteklemediğini öğrenmek için Display.isMinimalPostProcessingSupported() yöntemini çağırın.

Giriş cihazları

TV'lerin dokunmatik arayüzleri yoktur. Bu yüzden, kontrollerinizi doğru yapmanız ve oyuncuların bunları sezgisel ve eğlenceli bulduğundan emin olmanız daha da önemlidir. Denetleyicileri kullanmak, birden fazla kumandanın takip edilmesi ve bağlantı kesintilerinin düzgün şekilde ele alınması gibi dikkat edilmesi gereken diğer sorunları da beraberinde getirir. Oyunlar da dahil olmak üzere tüm TV uygulamaları, kumandaları tutarlı bir şekilde kullanmalıdır. TV kumandalarını kullanma hakkında daha fazla bilgi için TV denetleyicilerini yönetme ve oyunlar için TV kumandalarını kullanma hakkında ayrıntılı bilgi için Oyunlar için kumandaları yönetme bölümünü okuyun.

Klavye düzenleri

Android 13 (API düzeyi 33) ve sonraki sürümlerde klavye düzenlerini getKeyCodeForKeyLocation() ile belirleyebilirsiniz. Örneğin, oyununuz WASD tuşlarını kullanarak hareketi destekler, ancak bu işlev, A ve W tuşlarının farklı yerlerde olduğu AZERTY klavyede düzgün çalışmayabilir. Belirli konumlarda olmasını beklediğiniz anahtarları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 klavyeyle keyUp KeyEvent.KEYCODE_Z, keyLeft KeyEvent.KEYCODE_Q ve keyDown ile keyRight sırasıyla KeyEvent.KEYCODE_S ve KeyEvent.KEYCODE_D olarak ayarlanmıştır. Artık bu anahtar kodları için önemli etkinlik işleyiciler oluşturabilir ve beklenen davranışı uygulayabilirsiniz.

Manifest

Oyunların Android manifest dosyalarında bulunması gereken bazı özel öğeler vardır.

Oyununuzu ana ekranda gösterin

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. Örneğin:

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

Oyun kumandaları için destek belirtme

Oyun kumandaları, TV cihazı kullanıcıları tarafından kullanılamayabilir veya etkin olmayabilir. Kullanıcılara oyununuzun bir oyun kumandasını desteklediğini doğru şekilde bildirmek için uygulama manifest dosyanıza 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 bölümüne bakın.

Google Play oyun hizmetleri

Oyununuz Google Play oyun hizmetlerini entegre ediyorsa başarılar, oturum açma ve oyunları kaydetmeyle ilgili bir dizi noktayı aklınızda 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ı kazanabilmelidir. Başarılar ve nasıl uygulanacağı hakkında daha fazla bilgi için Android'de Başarılar konusuna bakın.

Oturum açma

Oyununuz başlatıldığında kullanıcının oturum açmasını sağlamaya çalışmalıdır. Oyuncu art arda birkaç kez oturum açmayı reddederse oyununuz bunu sormayı bırakmalıdır. Oturum açma hakkında daha fazla bilgi için Android'de oturum açmayı uygulama başlıklı makaleyi inceleyin.

Kaydediliyor

Oyun kayıtlarınızı saklamak için Google Play Hizmetleri Kaydedilmiş Oyunlar'ı kullanın. Oyununuz, farklı cihazlarda bile benzersiz bir şekilde tanımlanabilmesi için oyun kayıtlarını belirli bir Google hesabına bağlamalıdır: Oyuncu ister cihaz ister televizyon kullanıyor olsun, oyun kaydı bilgilerini aynı kullanıcı hesabından alabilmelidir.

Ayrıca oyununuzun kullanıcı arayüzünde, oyuncunun yerel olarak ve bulutta depolanan verileri silmesine izin verme seçeneği sunmalısınız. Bu seçeneği oyunun Settings ekranına koyabilirsiniz. Kaydedilmiş oyunları Play Hizmetleri'ni kullanarak uygulama hakkında ayrıntılı bilgi için Android'de Kaydedilmiş Oyunlar konusuna bakın.

Çık

Kullanıcının oyundan sorunsuz bir şekilde çıkmasına olanak tanıyan tutarlı ve net bir kullanıcı arayüzü öğesi sağlayın. Bu öğeye D-pad gezinme düğmeleriyle erişilebilmelidir. Çıkış sağlamak için Ana Sayfa düğmesini kullanmak yerine bunu yapın. Bu, farklı kumandalar arasında tutarlı ve güvenilir değildir.

Web

Android TV için oyunlarda web'e göz atma özelliğini etkinleştirme 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 çoğu zaman daha fazla bant genişliğine ihtiyaç duyar ve birç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'ye yönelikse mobil uygulamalarda olduğu gibi 3G/LTE hizmetini kontrol etmeniz gerekmez.