![Komputer desktop dengan keyboard dan mouse. Game ada di layar, menampilkan input layar sentuh untuk kontrol arah dan mouse.](https://developer.android.google.cn/static/images/games/multiplatform/game_with_touchscreen_input.png?authuser=2&hl=id)
Perangkat Android hadir dalam berbagai bentuk dan ukuran. Perluas jangkauan game Anda dengan memungkinkan pemain bermain di mana pun mereka mau, baik di ponsel, tablet, PC, TV, mobil, atau headset XR. Di sini Anda akan mempelajari:
- Cara dukungan mouse dan keyboard dapat menghadirkan game Anda kepada pemain di PC dan ChromeOS serta meningkatkan kemampuan bermain di perangkat layar besar.
- Cara memenuhi kebutuhan pemain paling setia Anda di mana pun mereka berada dengan integrasi gamepad.
- Cara menambahkan dukungan stilus untuk gameplay yang akurat dan responsif kapan saja di mana saja.
- Cara mendukung pengontrol TV dan membuka layar terbesar yang dimiliki pemain: TV mereka.
- Pertimbangan desain terkait kapan harus beralih antarmetode input.
- Yang dilakukan game lintas faktor bentuk untuk mendukung preferensi input pemain.
- Dan masih banyak lagi.
Kompatibilitas otomatis
Android memiliki kompatibilitas non-sentuh otomatis jika memungkinkan, misalnya:
dispatchTouchEvent
/onTouchEvent
merespons dengan peristiwa gerakan bahkan untuk klik atau input stilus. Artinya, jika Anda tidak mencentang jenis alat, logika penanganan sentuh Anda akan berfungsi dengan mouse dan stilus.- Beberapa peristiwa gamepad dan pengontrol TV yang tidak ditangani akan ditampilkan kembali sebagai peristiwa keyboard.
Faktor bentuk seperti PC, seperti Play Game dan ChromeOS, secara default menghasilkan sentuhan dari klik mouse. Karena mungkin tidak ada layar sentuh yang dapat digunakan, hal ini memberikan tingkat kompatibilitas dasar.
Peristiwa gamepad dan pengontrol TV yang tidak ditangani akan ditampilkan ulang sebagai peristiwa keyboard.
Faktor bentuk seperti PC seperti Play Game dan ChromeOS menghasilkan peristiwa sentuh, bukan peristiwa mouse secara default untuk memaksimalkan kompatibilitas dengan game yang mengharapkan input layar sentuh.
Untuk pengalaman pengguna terbaik, terapkan dukungan langsung untuk input non-sentuh, bukan mengandalkan kompatibilitas otomatis.
Mendukung semua faktor bentuk
Android berjalan di daftar perangkat yang terus bertambah. Baik pemain Anda membentangkan ponsel menjadi tablet layar besar, menyalakan TV yang kompatibel dengan Android, membuka game Android di Chromebook, atau memulai game cepat di mobil saat menunggu pengisian daya, Anda dapat berinteraksi dengan pemain di lebih banyak tempat dan di lebih banyak layar daripada sebelumnya. Anda hanya perlu memastikan bahwa game dapat dimainkan di tempat pemain berada:
Faktor bentuk | Input default standar | Layar sentuh | Mouse dan keyboard | Gamepad | Stilus1 | D-pad 5 arah |
---|---|---|---|---|---|---|
Ponsel | Layar sentuh | Ya | Ya | Ya | Ya | Ya |
Perangkat layar besar | Layar sentuh | Ya | Ya | Ya | Ya | Ya |
PC2 | Mouse dan keyboard | Tidak | Ya | Ya | Tidak | Tidak |
ChromeOS3 | Touchpad, mouse, dan keyboard | Kadang-kadang | Ya | Ya | Ya | Ya |
TV | D-pad 5 arah | Tidak | Ya | Ya | Tidak | Ya |
Mobil4 (Automotive OS) |
Layar sentuh | Ya | Ya | Ya | Tidak | Ya |
Tonton5 | Layar sentuh | Ya | Tidak | Tidak | Tidak | Tidak |
Tabel ini dimaksudkan untuk membantu Anda memprioritaskan dukungan untuk mekanisme input baru dengan menandai input yang diharapkan pada setiap faktor bentuk. Perhatikan bahwa Anda harus:
- Hindari memiliki satu mekanisme input default. Tindakan ini dapat secara tidak sengaja membatasi jangkauan upaya non-sentuh Anda. Misalnya, meskipun sebagian besar pemain ingin memainkan game ChromeOS dengan mouse dan keyboard, beberapa pemain mungkin masih menginginkan dukungan layar sentuh, bergantung pada profil perangkat mereka.
- Hindari mengunci mekanisme input untuk membentuk faktor. Android berfungsi dengan berbagai periferal, dan perangkat hybrid semakin populer. Menghapus dukungan keyboard dari build ponsel dapat membuat game Anda terasa tidak lengkap jika pemain memiliki tablet yang dilengkapi dengan keyboard yang dapat dilepas.
Input mouse
Layar terbesar dan paling imersif dari pemain mungkin menjalankan Android, baik itu laptop ChromeOS, tablet Android, atau PC. Pemain sering kali ingin bermain game dengan mouse di perangkat ini, dan menambahkan dukungan dapat meningkatkan interaksi pemain. Android mendukung fitur umum yang biasa digunakan untuk sistem operasi desktop, termasuk:
- Dukungan untuk klik kiri, kanan, dan tengah serta tombol tambahan seperti kembali dan maju
- Deteksi roda scroll
- Pelaporan gerakan mouse absolut atau relatif (juga dikenal sebagai pengambilan pointer)
- Kemampuan untuk menentukan ikon pointer kustom
Panduan khusus faktor bentuk tersedia untuk:
Input touchpad
Perekaman input touchpad di Android sedikit berbeda dengan dukungan mouse. Saat memanggil requestPointerCapture()
, Anda meminta akses mentah ke sentuhan pada pad. Artinya, Anda menerima peristiwa untuk setiap sentuhan dengan cara yang sama seperti mendapatkan peristiwa multi-sentuh dari layar sentuh, kecuali bahwa koordinat berada di ruang koordinat touchpad, bukan di ruang koordinat layar. Deteksi gestur touchpad bawaan dan pemfilteran telapak tangan Android dinonaktifkan dalam mode ini. Misalnya, jika pengguna menggerakkan satu jari di pad sambil meletakkan ibu jari di pojok kiri bawah yang siap diklik, game Anda dapat menentukan gerakan jari mana yang akan digunakan dalam logika Anda (misalnya, untuk menggerakkan kamera).
Artinya, gamepad dengan touchpad bawaan dapat digunakan seperti layar sentuh untuk input berbasis gestur yang andal.
Untuk menentukan apakah pemain menggunakan mouse atau touchpad selama pengambilan pointer, periksa nilai sumber dari InputDevice#getSources()
atau MotionEvent#getSource()
untuk InputDevice.SOURCE_TOUCHPAD
.
Input keyboard
Dukungan keyboard hampir universal di semua perangkat Android. Bergantung pada jenis game yang Anda kembangkan, manfaat menambahkan awareness keyboard ke game Anda berkisar dari mengembangkan basis pemain dengan membuat game lebih mudah diakses hingga membuat game lebih imersif dan intuitif untuk dimainkan.
Beberapa cara umum untuk meningkatkan kualitas game dengan dukungan keyboard:
- Mekanisme multisentuh harus dipetakan ke keyboard untuk perangkat non-sentuh. Game yang memerlukan dua sentuhan atau lebih secara bersamaan, seperti bergerak dan melompat, akan mendapatkan manfaat dari pemetaan tindakan ini ke penekanan keyboard untuk meningkatkan kemampuan bermain di perangkat layar besar dan perangkat non-layar sentuh.
- Buat menu dapat dinavigasi dengan keyboard. Menambahkan navigasi tombol, seperti tombol panah dan Enter, ke menu dan elemen gameplay statis memungkinkan game dimainkan di TV dan meningkatkan aksesibilitas Anda di semua faktor bentuk.
- Menambahkan hotkey untuk tindakan di layar. Petakan apa pun yang dapat disentuh pemain di layar ke tindakan keyboard. Akses cepat ke tindakan seperti memilih unit dalam game strategi atau mengaktifkan slot inventaris dalam game aksi membuat pemain tetap tenggelam dalam game Anda.
Perlu diingat bahwa meskipun keyboard QWERTY cukup umum, ada banyak tata letak populer yang berbeda dan beberapa karakter yang merupakan satu penekanan tombol dalam satu tata letak mungkin merupakan akord dalam tata letak lainnya.
Jika game Anda menggunakan posisi relatif tombol untuk melakukan tindakan, seperti menggunakan W, A, S, dan D seperti tombol panah untuk bergerak, gunakan InputDevice.getKeyCodeforKeyLocation()
untuk memetakan lokasi tombol QWERTY ke kode tombol di KeyEvent.getKeyCode()
. Jika tata letak pemutar berubah, onInputDeviceChanged()
akan dipanggil.
Saat menambahkan entri teks ke game, TextInput di GameActivity menyediakan mekanisme untuk menangani input IME, tanda diakritik, atau variasi khusus wilayah lainnya dalam tata letak dengan andal sambil tetap menggunakan mesin rendering teks dalam game. Hal ini menghindari banyak masalah dalam menangani input keyboard secara langsung atau menggunakan widget EditText
di luar layar.
Input gamepad
![Gambar gamepad standar. Gamepad ini memiliki tombol arah, empat tombol muka berlabel a, b, x, dan y, dua stik analog, dan empat pemicu. Ada angka pada gambar, tetapi angka tersebut tidak dirujuk di halaman ini.](https://developer.android.google.cn/static/images/training/game-controller-profiles.png?authuser=2&hl=id)
Gamepad didukung secara resmi di seluruh Android, termasuk peristiwa koneksi dan pemutusan koneksi, dukungan haptic, dukungan input lanjutan termasuk giroskop, dan dukungan output seperti warna terang jika tersedia.
Developer aplikasi dapat memproses input gamepad melalui callback View
atau Activity
, tetapi developer game dianjurkan untuk menggunakan Library Pengontrol Game yang:
- Ditulis dalam C++ untuk memfasilitasi integrasi ke dalam game engine Anda sendiri
- Memusatkan semua fitur gamepad ke dalam satu API
- Membedakan simbol pada tombol muka gamepad, sehingga label game Anda dapat cocok dengan gamepad pemain
- Menyatukan pelaporan peristiwa gamepad jika tombol akan menjadi input analog di beberapa gamepad, tetapi input biner di gamepad lainnya
- Memberikan kompatibilitas maju terbatas di perangkat Android lama untuk gamepad yang lebih baru
Input stilus
![Gambar yang menampilkan aplikasi gambar. Kuas terbuka yang menampilkan bentuk yang dapat digambar dengan stilus.](https://developer.android.google.cn/static/develop/ui/compose/images/touchinput/stylus/hero.png?authuser=2&hl=id)
Android memiliki dukungan stilus lanjutan di sebagian besar perangkat, termasuk tekanan, orientasi, kemiringan, pengarahan kursor, dan deteksi telapak tangan. Peristiwa stilus dikirim ke callback sentuh untuk membantu kompatibilitas, tetapi penting untuk menguji dengan perangkat stilus jika logika mesin Anda memfilter peristiwa ini. Integrasi penuh menguntungkan game dengan target sentuh kecil atau game yang menggambar bentuk bebas terasa alami.
Saat rendering tertinggal dari gerakan stilus, latensi akan lebih jelas daripada saat diblokir oleh jari atau terputus dari layar seperti dengan keyboard, mouse, atau gamepad. Karena alasan ini, Android menyediakan pipeline latensi rendah untuk merender goresan dengan latensi hanya 4 md dari gerakan pena untuk ditampilkan di layar. Ada tiga cara agar game Anda dapat memanfaatkan kemampuan ini, sehingga game Anda terasa terhubung langsung ke dunia nyata:
- Library Jetpack Ink menyediakan toolkit yang praktis untuk menambahkan rendering goresan yang responsif ke project Android apa pun.
- Untuk game yang tidak dapat atau tidak ingin mengandalkan komponen Kotlin untuk rendering goresan, kode sumber C++ lengkap tersedia. Hal ini memungkinkan developer mengintegrasikan hal yang mereka butuhkan langsung ke dalam teknologi mereka.
- Untuk game yang memerlukan integrasi kustom penuh, Anda dapat menjalankan logika rendering kustom langsung di buffering depan untuk memaksimalkan responsivitas dan kontrol.
Pengontrol TV
![Gambar pengontrol TV untuk Android. Tombol yang ditampilkan adalah D-pad, tombol pilih, tombol mikrofon atau asisten, tombol kembali, dan tombol layar utama.](https://developer.android.google.cn/static/training/tv/images/tv-nav-controller.png?authuser=2&hl=id)
Perangkat Android TV dilengkapi dengan remote yang menyertakan D-pad 5 arah yang terdiri dari empat arah mata angin dan tombol OK. Aplikasi yang menggunakan sistem widget bawaan Android mendukungnya secara default, tetapi developer harus menguji widget kustom game mereka untuk mempertahankan kompatibilitas di perangkat TV.
Lihat dokumentasi Android TV untuk informasi selengkapnya.
Pertimbangan tambahan
Untuk memberikan pengalaman terbaik kepada pemain, desainlah beberapa bentuk input dan beralihlah di antara input tersebut dengan cepat. Dengan cara ini, pemain dapat beralih dengan cepat di antara berbagai metode input, bergantung pada mode game yang mereka gunakan, atau game dapat bertransisi di antara berbagai konfigurasi dari satu perangkat yang didukung Android dengan mudah.
Dengan mengingat hal itu, perhatikan bahwa:
- Memeriksa keberadaan jenis input lebih baik daripada memfilter berdasarkan faktor bentuk. Misalnya, jika Anda hanya mengaktifkan dukungan mouse dan keyboard di ChromeOS, pemain di tablet dengan keyboard yang dapat dilepas tidak akan mendapatkan manfaat dari upaya ekstra Anda.
- Ada pertimbangan di luar faktor bentuk yang memengaruhi bentuk input terbaik. Misalnya, kebutuhan aksesibilitas pemain mungkin membuat mouse atau layar sentuh sulit atau tidak nyaman digunakan, tetapi gamepad atau keyboard lebih ideal.
- Dukungan apa pun lebih baik daripada tidak ada dukungan. Idealnya, respons terhadap perubahan input dilakukan dengan cepat, tetapi pemain lebih menyukai dukungan daripada tidak ada dukungan selama mereka dapat mengaksesnya.
- Input terbaik dapat berubah di antara setiap pengoperasian game Anda. Misalnya, layar sentuh lebih disukai saat bermain game di mana saja, gamepad saat ponsel dicolokkan ke TV, dan mouse serta keyboard saat duduk di meja.
Cara merespons input pengguna
Game seluler standar mendukung satu pemain per perangkat. Untuk hasil terbaik, game akan merespons semua kemungkinan input dan mengubah UI berdasarkan apa yang digunakan pemain secara aktif. Dengan cara ini, satu versi game akan otomatis berfungsi di semua faktor bentuk, dan pemain bahkan dapat memadukan input agar sesuai dengan kebutuhan mereka.
Sering kali developer ingin memiliki metode input default dengan penundaan bawaan sebelum mengubah UI. Apa maksudnya?
- Karena sebagian besar pemain bermain di layar sentuh, tampilkan kontrol sentuh saat peluncuran. Jika pemain mulai bermain dengan keyboard atau gamepad dan tidak menggunakan layar sentuh selama beberapa waktu, pudarkan lapisan sentuh.
- Jika pemain menggunakan gamepad dan menekan tombol keyboard, alihkan petunjuk dalam game untuk menampilkan tombol keyboard, bukan tombol gamepad.
- Saat pemain menggunakan keyboard dan gamepad secara bersamaan, buat penundaan sebelum beralih UI dari satu kumpulan petunjuk ke kumpulan petunjuk lainnya untuk menghindari kedipan layar.
- Periksa jenis sumber input saat memproses input; tombol keyboard dan tombol gamepad memunculkan peristiwa tombol ditekan.
- Cobalah untuk tidak menandai input sebagai ditangani kecuali jika game Anda dapat menanganinya. Android memunculkan ulang beberapa peristiwa untuk memfasilitasi kompatibilitas pada faktor bentuk yang lebih baru, misalnya, mengubah tombol A gamepad menjadi tombol OK.
Menambahkan anotasi pada dukungan input dalam manifes
Meskipun tidak wajib, sebaiknya anotasikan dengan flag fitur manifes jenis input yang Anda tangani. Flag umum adalah:
android.hardware.type.pc
: Menonaktifkan lapisan kompatibilitas input di ChromeOS dan PC agar developer dapat menangani peristiwa mouse secara langsung. Tetapkanandroid:required="false"
agar game tetap dikirim ke ponsel.android.hardware.gamepad
: Aplikasi dan game menerima peristiwa gamepad, baik yang mendukung gamepad maupun yang tidak. Menentukan tanda manifes ini dan menetapkanandroid:required="false"
memungkinkan game Anda ditayangkan ke perangkat Android TV dengan gamepad terpasang.
-
Produsen dapat menyertakan dukungan stilus untuk beberapa perangkat, tetapi tidak ada faktor bentuk yang menjamin dukungan. Pad gambar dapat dicolokkan ke perangkat Android dan muncul sebagai stilus. ↩
-
Meskipun beberapa PC memiliki dukungan layar sentuh dan stilus, klien Google Play Game hanya merespons peristiwa mouse dari sistem operasi host. Untuk memaksimalkan kompatibilitas, peristiwa mouse muncul sebagai peristiwa sentuh di klien secara default. Lihat bagian Input Mouse untuk mengetahui informasi selengkapnya. ↩
-
Perangkat ChromeOS umumnya memiliki dukungan mouse dan keyboard, tetapi layar sentuh bersifat opsional. Banyak perangkat yang dilengkapi layar sentuh juga mendukung input stilus. ↩
-
Android Automotive OS mengacu pada mobil dengan Android bawaan, yang dapat berfungsi tanpa ponsel Android. Automotive OS adalah yang dimaksud diagram ini. Android Auto memproyeksikan aplikasi dari ponsel ke mobil, dan perangkat yang mendukung Android Auto (proyeksi) mungkin tidak memiliki layar sentuh. ↩
-
Perangkat Wear OS memiliki konektivitas terbatas. Anda dapat memindai periferal Bluetooth, tetapi OS sering kali gagal terhubung. ↩