Membuat game TV

Layar televisi menyajikan sejumlah pertimbangan yang mungkin baru bagi game seluler developer. Area ini termasuk ukurannya yang besar, skema kontrolnya, dan fakta bahwa semua pemain melihatnya secara bersamaan.

Tampilan

Dua hal utama yang perlu diingat saat mengembangkan {i>game<i} untuk layar TV adalah game Anda untuk orientasi lanskap dan memberikan dukungan untuk latensi rendah.

Mendukung tampilan lanskap

Tampilan TV selalu menyamping: Anda tidak dapat memutarnya, tidak tersedia orientasi potret. Selalu desain game TV Anda untuk ditampilkan dalam mode lanskap.

Mode latensi rendah otomatis

Layar tertentu dapat melakukan pascapemrosesan grafis. Pasca-pemrosesan ini meningkatkan kualitas grafik tetapi dapat meningkatkan latensi. Layar lebih baru yang mendukung HDMI 2.1 memiliki mode rendah otomatis mode latensi (ALLM), yang meminimalkan latensi dengan menonaktifkan pascapemrosesan ini. Sebagai detail selengkapnya tentang ALLM, lihat Spesifikasi HDMI 2.1. Yang lain layar dapat mendukung mode game dengan perilaku serupa.

Di Android 11 dan yang lebih baru, jendela dapat meminta mode atau game latensi rendah otomatis tersebut yang digunakan, jika tersedia, dengan meminta pascapemrosesan minimal. Hal ini sangat berguna untuk aplikasi {i>game<i} dan konferensi video, di mana latensi rendah lebih penting daripada memiliki grafis terbaik.

Untuk mengaktifkan atau menonaktifkan pasca-pemrosesan minimal, panggil Window.setPreferMinimalPostProcessing(), atau atur jendela preferMinimalPostProcessing ke true. Tidak semua layar mendukung pascapemrosesan minimal; untuk mengetahui apakah tampilan tertentu mendukungnya, panggil metode Metode Display.isMinimalPostProcessingSupported().

Perangkat input

TV tidak memiliki antarmuka sentuh, jadi kontrol Anda perlu benar dan pastikan pemain menganggapnya intuitif dan menyenangkan untuk digunakan. Menangani pengontrol juga memperkenalkan beberapa masalah lain yang harus diperhatikan, seperti melacak {i>controller<i}, dan penanganan terputus dengan baik. Semua aplikasi TV, termasuk game, harus menangani pengontrol secara konsisten. Baca Mengelola TV untuk informasi lebih lanjut tentang cara menggunakan pengontrol TV dan Menangani pengontrol untuk game untuk pengguna informasi tentang cara menggunakan pengontrol TV untuk game.

Tata letak keyboard

Di Android 13 (API level 33) dan yang lebih baru, Anda dapat menentukan tata letak keyboard menggunakan getKeyCodeForKeyLocation(). Misalnya, game Anda mendukung gerakan menggunakan tombol WASD, tetapi ini mungkin tidak berfungsi dengan benar di {i>keyboard<i} AZERTY yang memiliki tombol A dan W di lokasi berbeda. Anda bisa mendapatkan kode tombol untuk kunci yang Anda harapkan di posisi tertentu:

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);
}

Dalam contoh ini, dengan keyboard AZERTY, keyUp disetel ke KeyEvent.KEYCODE_Z, keyLeft disetel ke KeyEvent.KEYCODE_Q, sedangkan keyDown dan keyRight ditetapkan ke KeyEvent.KEYCODE_S dan KeyEvent.KEYCODE_D. Sekarang Anda dapat membuat pengendali peristiwa utama untuk kode tombol dan menerapkan perilaku yang diharapkan.

Manifes

Ada beberapa hal khusus yang harus disertakan game dalam manifes Android.

Menampilkan game di layar utama

Layar utama Android TV menampilkan game pada baris terpisah dari aplikasi reguler. Agar game Anda muncul di daftar game, setel android:isGame ke "true" dalam manifes aplikasi Anda <application> . Contoh:

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

Mendeklarasikan dukungan untuk pengontrol game

Pengontrol game mungkin tidak tersedia atau tidak aktif bagi pengguna perangkat TV. Agar dapat memberi tahu pengguna bahwa game Anda mendukung pengontrol game, Anda harus menyertakan entri berikut di manifes aplikasi Anda:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

Catatan: Saat menentukan dukungan android:hardware:gamepad, jangan tetapkan android:required ke "true". Jika Anda melakukan hal ini, pengguna tidak akan dapat menginstal aplikasi Anda di perangkat TV.

Untuk mengetahui informasi selengkapnya tentang entri manifes, lihat Manifes aplikasi.

Layanan game Google Play

Jika game Anda mengintegrasikan layanan game Google Play, Anda harus mengingat berbagai pertimbangan yang berkaitan dengan pencapaian, login, dan penyimpanan game.

Pencapaian

Game Anda harus menyertakan minimal lima pencapaian (yang dapat diperoleh). Hanya pengguna yang mengontrol gameplay dari perangkat input yang didukung akan dapat memperoleh pencapaian. Untuk mengetahui informasi selengkapnya tentang pencapaian dan cara menerapkannya, lihat Pencapaian di Android.

Login

Game Anda harus berusaha untuk membuat pengguna login pada saat peluncuran. Jika pemain menolak login beberapa kali berturut-turut, {i>game<i} Anda akan berhenti bertanya. Pelajari lebih lanjut login di Menerapkan login di Android.

Menyimpan

Gunakan Layanan Google Play Game Tersimpan untuk menyimpan penyimpanan game Anda. Game Anda harus mengikat penyimpanan game ke Akun Google tertentu, agar dapat dikenali secara khusus bahkan di seluruh perangkat: Entah pemain menggunakan handset atau TV, game harus bisa mengambil informasi penyimpanan game dari akun pengguna yang sama.

Anda juga harus menyediakan opsi di UI game untuk memungkinkan pemain menghapus game secara lokal dan yang disimpan di cloud. Anda dapat menaruh opsi di layar Settings game. Sebagai detail tentang cara menerapkan game tersimpan menggunakan Layanan Play, lihat Game Tersimpan di Android.

Keluar

Sediakan elemen UI yang konsisten dan jelas yang memungkinkan pengguna keluar dari game dengan lancar. Ini harus dapat diakses dengan tombol navigasi D-pad. Lakukan hal ini daripada mengandalkan Tombol Beranda untuk memberikan keluar, karena tidak konsisten atau tidak dapat diandalkan di berbagai pengontrol.

Web

Jangan aktifkan penjelajahan web dalam game untuk Android TV. Android TV tidak mendukung browser web.

Catatan: Anda dapat menggunakan class WebView untuk login guna dan layanan media sosial.

Jaringan

Game sering kali membutuhkan bandwidth yang lebih besar untuk memberikan performa yang optimal, dan banyak pengguna lebih memilih eternet ke WiFi untuk memberikan kinerja tersebut. Aplikasi Anda harus memeriksa Wi-Fi dan ethernet koneksi jarak jauh. Jika aplikasi Anda hanya untuk TV, Anda tidak perlu memeriksa layanan 3G/LTE seperti yang Anda lakukan untuk aplikasi seluler.