Layar televisi menghadirkan sejumlah pertimbangan yang mungkin baru bagi developer game seluler. Area ini mencakup ukurannya yang besar, skema kontrolnya, dan fakta bahwa semua pemain melihatnya secara bersamaan.
Display
Dua hal utama yang perlu diingat saat mengembangkan game untuk layar TV adalah mendesain game Anda untuk orientasi lanskap dan memberikan dukungan untuk latensi rendah.
Mendukung tampilan lanskap
TV selalu menyamping: Anda tidak dapat memutarnya, dan tidak ada orientasi potret. Selalu desain game TV Anda untuk ditampilkan dalam mode lanskap.
Mode latensi rendah otomatis
Tampilan tertentu dapat melakukan pemrosesan pasca-grafis. Pascapemrosesan ini meningkatkan kualitas grafis, tetapi dapat meningkatkan latensi. Layar yang lebih baru yang mendukung HDMI 2.1 memiliki mode latensi rendah otomatis (ALLM), yang meminimalkan latensi dengan menonaktifkan pasca-pemrosesan ini. Untuk mengetahui detail selengkapnya tentang ALLM, lihat spesifikasi HDMI 2.1. Layar lain mungkin mendukung mode game dengan perilaku serupa.
Di Android 11 dan yang lebih baru, jendela dapat meminta agar mode latensi rendah otomatis atau mode game digunakan, jika tersedia, dengan meminta pemrosesan pasca minimal. Hal ini sangat berguna untuk aplikasi game dan konferensi video, yang mengutamakan latensi rendah daripada grafis terbaik.
Untuk mengaktifkan atau menonaktifkan pemrosesan pasca-minimal, panggil
Window.setPreferMinimalPostProcessing(),
atau tetapkan atribut
preferMinimalPostProcessing
jendela ke true. Tidak semua layar mendukung pemrosesan pasca minimal; untuk mengetahui apakah layar tertentu mendukungnya, panggil metode Display.isMinimalPostProcessingSupported().
Perangkat input
TV tidak memiliki antarmuka sentuh, jadi sangat penting untuk membuat kontrol yang tepat dan memastikan pemain merasa kontrol tersebut intuitif dan menyenangkan untuk digunakan. Penanganan pengontrol juga menimbulkan beberapa masalah lain yang perlu diperhatikan, seperti melacak beberapa pengontrol, dan menangani pemutusan koneksi dengan baik. Semua aplikasi TV, termasuk game, harus menangani pengontrol secara konsisten. Baca Mengelola pengontrol TV untuk mengetahui informasi selengkapnya tentang penggunaan pengontrol TV dan Menangani pengontrol untuk game untuk mengetahui informasi khusus tentang penggunaan pengontrol TV untuk game.
Tata letak keyboard
Di Android 13 (API level 33) dan yang lebih tinggi, Anda dapat menentukan tata letak keyboard menggunakan
getKeyCodeForKeyLocation().
Misalnya, game Anda mendukung gerakan menggunakan tombol WASD, tetapi ini mungkin tidak berfungsi dengan benar di
keyboard AZERTY yang memiliki tombol A dan W di lokasi yang berbeda. Anda bisa mendapatkan kode tombol
untuk tombol 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 ditetapkan ke
KeyEvent.KEYCODE_Z, keyLeft ditetapkan ke KeyEvent.KEYCODE_Q,
sementara keyDown dan keyRight masing-masing ditetapkan ke KeyEvent.KEYCODE_S
dan KeyEvent.KEYCODE_D. Sekarang Anda dapat membuat pengendali peristiwa tombol untuk kode tombol ini 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 dalam daftar game, tetapkan
atribut
android:isGame ke "true" di tag
<application>
manifes aplikasi Anda. Contoh:
<application ... android:isGame="true" ... >
Mendeklarasikan dukungan untuk pengontrol game
Pengontrol game mungkin tidak tersedia atau aktif untuk pengguna perangkat TV. Untuk memberi tahu pengguna dengan benar bahwa game Anda mendukung pengontrol game, Anda harus menyertakan entri berikut dalam manifes aplikasi:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
Catatan: Saat menentukan dukungan android.hardware.gamepad, tetapkan atribut android:required ke
"false" jika game Anda juga dapat dimainkan dengan remote TV
standar (D-pad). Tetapkan android:required ke
"true" hanya jika pengontrol game diperlukan untuk memainkan game Anda.
Setelan android:required="true" menampilkan badge "Gamepad diperlukan" dan peringatan pra-penginstalan di Google Play untuk Android TV, bukan memblokir penginstalan 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 sejumlah pertimbangan terkait pencapaian, login, dan Game Tersimpan.
Pencapaian
Game Anda harus menyertakan minimal lima pencapaian (yang dapat diperoleh). Hanya pengguna yang mengontrol gameplay dari perangkat input yang didukung yang 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, game Anda harus berhenti meminta login. Pelajari lebih lanjut login di Menerapkan login di Android.
Menyimpan
Gunakan Game Tersimpan layanan Google Play untuk menyimpan game Anda. Game Anda harus mengikat penyimpanan game ke Akun Google tertentu, sehingga dapat diidentifikasi secara unik meskipun di seluruh perangkat: Baik pemain menggunakan handset atau TV, game harus dapat menarik informasi penyimpanan game dari akun pengguna yang sama.
Anda juga harus menyediakan opsi di UI game untuk memungkinkan pemain menghapus data yang disimpan secara lokal dan
di cloud. Anda dapat menaruh opsi di layar Settings game. Untuk
mengetahui 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. Elemen ini harus dapat diakses dengan tombol navigasi D-pad. Lakukan ini, alih-alih mengandalkan tombol Layar utama untuk menyediakan jalan keluar, karena hal itu tidak konsisten atau tidak dapat diandalkan di berbagai pengontrol.
Web
Jangan aktifkan browser web dalam game untuk Android TV. Android TV tidak mendukung browser web.
Catatan: Anda dapat menggunakan class WebView untuk login ke layanan media sosial.
Jaringan
Game sering kali memerlukan bandwidth yang lebih besar untuk memberikan performa optimal, dan banyak pengguna lebih memilih ethernet daripada Wi-Fi untuk memberikan performa tersebut. Aplikasi Anda harus memeriksa koneksi Wi-Fi dan ethernet. Jika aplikasi Anda hanya untuk TV, Anda tidak perlu memeriksa layanan 3G/LTE seperti yang Anda lakukan untuk aplikasi seluler.