![Komputer stacjonarny z klawiaturą i myszą. Gra na ekranie, pokazująca polecenia na ekranie dotykowym służące do sterowania kierunkiem i myszką.](https://developer.android.com/static/images/games/multiplatform/game_with_touchscreen_input.png?authuser=3&hl=pl)
Urządzenia z Androidem występują w różnych kształtach i rozmiarach. Zwiększ zasięg swojej gry, umożliwiając graczom granie w dowolnym miejscu i w dowolnym czasie, niezależnie od tego, czy korzystają z telefonu, tabletu, komputera, telewizora, samochodu czy zestawu XR. Dowiesz się tu:
- Jak obsługa myszy i klawiatury może przyciągnąć graczy na komputery i ChromeOS oraz poprawić komfort grania na urządzeniach z dużym ekranem.
- Jak docierać do najbardziej oddanych graczy dzięki integracji z padami do gier.
- Jak dodać obsługę rysika, aby zapewnić precyzyjny i wydajny gameplay w ruchu.
- Jak obsługiwać kontroler telewizora i odblokować największy ekran, jaki mają gracze: ich telewizor.
- Uwagi dotyczące projektowania: kiedy przełączać się między metodami wprowadzania danych.
- Jak gry na różne platformy obsługują preferencje graczy dotyczące sposobu wprowadzania danych.
- i wiele innych.
Automatyczna zgodność
Android ma automatyczną obsługę bezdotkową, gdy jest to możliwe, na przykład:
dispatchTouchEvent
/onTouchEvent
reagować na zdarzenia związane z ruchu nawet w przypadku kliknięć lub wprowadzania za pomocą rysika. Oznacza to, że jeśli nie zaznaczysz typu narzędzia, logika obsługi dotyku powinna działać z myszą i rysikiem.- Niektóre nieobsługiwane zdarzenia kontrolera gry i kontrolera telewizora są ponownie wysyłane jako zdarzenia klawiatury.
Formaty takie jak PC, Gry Google Play i ChromeOS domyślnie generują dotknięcia z kliknięć myszką. Ponieważ może nie być ekranu dotykowego, który można by wykorzystać jako alternatywy, zapewnia to podstawowy poziom zgodności.
Zdarzenia myszy i rysika są wysyłane do wywołań zwrotnych dotyku.
Nieobsługiwane zdarzenia pada do gier i kontrolera telewizora są ponownie wysyłane jako zdarzenia klawiatury.
Formaty podobne do PC, takie jak Gry Google Play i ChromeOS, domyślnie generują zdarzenia dotykowe, a nie zdarzenia myszy, aby zmaksymalizować zgodność z grami wymagającymi korzystania z ekranu dotykowego.
Aby zapewnić użytkownikom najlepsze wrażenia, zamiast polegać na automatycznej zgodności, zaimplementuj bezpośrednie obsługiwanie urządzeń wejściowych bezdotykowych.
Obsługa wszystkich formatów
Android działa na coraz większej liczbie urządzeń. Niezależnie od tego, czy gracze rozłożą telefon na duży tablet, włączą telewizor z Androidem, uruchomią grę na Androida na Chromebooku czy zagrają w szybką grę w samochodzie podczas ładowania, możesz zachęcić ich do korzystania z gry w więcej miejscach i na większej liczbie ekranów niż kiedykolwiek wcześniej. Musisz tylko zadbać o to, aby gra była dostępna w miejscach, w których znajdują się Twoi gracze:
Format | Typowe domyślne dane wejściowe | Ekran dotykowy | Mysz i klawiatura | Gamepad | Rysik 1 | 5-kierunkowy pad kierunkowy |
---|---|---|---|---|---|---|
Telefon | Ekran dotykowy | Tak | Tak | Tak | Tak | Tak |
Duży ekran | Ekran dotykowy | Tak | Tak | Tak | Tak | Tak |
PC2 | Mysz i klawiatura | Nie | Tak | Tak | Nie | Nie |
ChromeOS3 | Touchpad, mysz i klawiatura | Czasami | Tak | Tak | Tak | Tak |
Telewizory | 5-kierunkowy pad kierunkowy | Nie | Tak | Tak | Nie | Tak |
Samochody 4 (Automotive OS) |
Ekran dotykowy | Tak | Tak | Tak | Nie | Tak |
5 | Ekran dotykowy | Tak | Nie | Nie | Nie | Nie |
Ta tabela ma pomóc Ci w nadawaniu priorytetów obsłudze nowych mechanizmów wprowadzania danych przez wyróżnienie oczekiwanego sposobu wprowadzania danych w przypadku każdego formatu. Pamiętaj, że musisz:
- Unikaj używania jednego domyślnego mechanizmu wprowadzania danych. Może to przypadkowo ograniczyć zasięg Twoich działań bezdotykowych. Na przykład większość graczy chce grać w gry na ChromeOS za pomocą myszy i klawiatury, ale niektórzy mogą chcieć obsługi ekranu dotykowego w zależności od profilu urządzenia.
- Unikaj blokowania mechanizmów wprowadzania danych w ramach formatów. Android współpracuje z różnymi urządzeniami peryferyjnymi, a urządzenia hybrydowe stają się coraz popularniejsze. Usunięcie obsługi klawiatury z wersji na telefon może sprawić, że gra będzie wydawać się niekompletna, jeśli gracz ma tablet z odłączaną klawiaturą.
sygnał myszy
Największy i najbardziej wciągający ekran może być obsługiwany przez Androida, niezależnie od tego, czy jest to laptop z ChromeOS, tablet z Androidem czy komputer PC. Gracze często oczekują, że na tych urządzeniach będą mogli grać za pomocą myszy, a dodanie obsługi myszy może zwiększyć zaangażowanie graczy. Android obsługuje typowe funkcje wspólne dla systemów operacyjnych na komputery, w tym:
- Obsługa lewego, prawego i środkowego kliknięcia, a także dodatkowych przycisków, takich jak wstecz i do przodu.
- Wykrywanie kółka przewijania
- rejestrowanie ruchów myszy w sposób bezwzględny lub względny (zwany też przechwytem wskaźnika);
- Możliwość definiowania niestandardowych ikon kursorów
Przewodniki dotyczące poszczególnych formatów:
Wprowadzanie danych za pomocą touchpada
Przechwytywanie danych z touchpada na Androidzie różni się nieco od obsługi myszy. Gdy wywołujesz requestPointerCapture()
, prosisz o dostęp do dotyku na padzie. Oznacza to, że otrzymujesz zdarzenia dotyczące każdego dotyku w taki sam sposób, w jaki otrzymujesz zdarzenia wielodotykowe z ekranu dotykowego, z tą różnicą, że współrzędne są w przestrzeni współrzędnych touchpada, a nie wyświetlacza. W tym trybie wyłączone są wbudowane wykrywanie gestów na touchpadzie i filtrowanie dotyku dłoni na Androidzie. Jeśli na przykład użytkownik przesuwa jeden palec po padzie, a kciuk trzyma w lewym dolnym rogu, aby móc w dowolnym momencie kliknąć, to od Ciebie zależy, czy w logice gry będzie używany ruch którego palca (np. do przesuwania kamery).
Oznacza to, że pady z wbudowanymi touchpadami mogą być używane podobnie jak ekrany dotykowe do obsługi gestów.
Aby określić, czy podczas rejestrowania kursora odtwarzacz używa myszy czy touchpada, sprawdź wartości źródłowe w InputDevice#getSources()
lub MotionEvent#getSource()
w InputDevice.SOURCE_TOUCHPAD
.
Klawiatura
Obsługa klawiatury jest prawie uniwersalna na wszystkich urządzeniach z Androidem. W zależności od rodzaju gry, korzyści płynące z dodania obsługi klawiatury mogą obejmować zwiększenie liczby graczy dzięki ułatwieniu im dostępu do gry oraz zwiększenie jej immersyjności i intuicyjności.
Oto kilka najczęstszych sposobów na polepszenie gry dzięki obsłudze klawiatury:
- W przypadku urządzeń bez ekranu dotykowego mechanizm wielodotykowy musi być przypisany do klawiatury. Gry wymagające jednoczesnego dotykania ekranu co najmniej 2 razy, np. przesuwania i skoków, mogą korzystać z przypisania tych działań do naciśnięć klawiszy, aby poprawić grywalność na dużych ekranach i ekranach bez funkcji dotykowej.
- Upewnij się, że menu można obsługiwać za pomocą klawiatury. Dodanie do menu i statycznych elementów rozgrywki przycisków nawigacyjnych, takich jak klawisze strzałek i przycisk Enter, umożliwia granie na telewizorach i poprawia dostępność we wszystkich formatach.
- Dodaj skróty klawiszowe do działań na ekranie. Mapowanie na działanie klawiatury każdego elementu, który gracz może dotknąć na ekranie. Szybki dostęp do działań takich jak wybieranie jednostek w grze strategicznej czy aktywowanie slotów ekwipunku w grze akcji sprawia, że gracze łatwiej wchodzą w klimat gry.
Pamiętaj, że chociaż klawiatury QWERTY są dość popularne, istnieje wiele różnych popularnych układów, a niektóre znaki, które w jednym układzie są pojedynczym naciśnięciem klawisza, w innym mogą być skrótem.
Jeśli Twoja gra używa względnej pozycji klawiszy do wykonywania działań, takich jak W, A, S i D jako klawiszy strzałek, użyj InputDevice.getKeyCodeforKeyLocation()
, aby zmapować pozycję klawisza QWERTY na kod klawisza w KeyEvent.getKeyCode()
. Jeśli układ odtwarzacza ulegnie zmianie, zostanie wywołana funkcja onInputDeviceChanged()
.
Podczas dodawania wpisu tekstowego do gry TextInput w GameActivity zapewnia mechanizm niezawodnego obsługiwania danych wprowadzanych za pomocą IME, znaków diakrytycznych i innych regionalnych odmian układu, przy jednoczesnym korzystaniu z silnika do renderowania tekstu w grze. Dzięki temu unikniesz wielu pułapek związanych z bezpośrednim obsługą danych wprowadzanych z klawiatury lub za pomocą widżetu poza ekranem EditText
.
Sterowanie za pomocą pada do gier
![Obraz typowego kontrolera. Ma pada kierunkowego, 4 przyciski na górze o oznaczeniu A, B, X i Y, 2 joysticki analogowych oraz 4 przyciski spustowe. Na obrazie są liczby, ale nie ma do nich odniesień na tej stronie.](https://developer.android.com/static/images/training/game-controller-profiles.png?authuser=3&hl=pl)
Pady są oficjalnie obsługiwane na urządzeniach z Androidem, w tym w przypadku zdarzeń łączenia i rozłączania, obsługi haptycznej, zaawansowanej obsługi danych wejściowych, w tym żyroskopów, oraz obsługi danych wyjściowych, np. kolor światła, gdy jest dostępna.
Deweloperzy aplikacji mogą odbierać dane z sterowania za pomocą kontrolera za pomocą wywołań zwrotnych View
lub Activity
, ale zachęcamy ich do korzystania z biblioteki sterownika gry, która:
- jest napisany w C++, aby ułatwić integrację z własnym silnikiem do tworzenia gier;
- Scentralizowanie wszystkich funkcji kontrolera w jednym interfejsie API
- Rozróżnia symbole na przyciskach pada, aby etykiety w grze pasowały do pada gracza.
- Ujednolica raportowanie zdarzeń kontrolera w przypadkach, gdy przyciski są analogowe na niektórych kontrolerach, a na innych są binarne.
- Zapewnia ograniczoną zgodność wsteczną na starszych urządzeniach z Androidem w przypadku nowszych kontrolerów gier
Wpisywanie za pomocą rysika
![Obraz przedstawiający aplikację do rysowania. Otwarte pędzle z kształtami, które można rysować rysikiem.](https://developer.android.com/static/develop/ui/compose/images/touchinput/stylus/hero.png?authuser=3&hl=pl)
Android obsługuje zaawansowany rysik na większości urządzeń, w tym pod kątem nacisku, orientacji, pochylenia, podświetlania i wykrywania dłoni. Zdarzenia związane z rysikiem są wysyłane do funkcji zwracanych po dotknięciu w celu zapewnienia zgodności, ale ważne jest, aby przetestować je za pomocą urządzenia z rysikiem, na wypadek gdyby logika silnika odfiltrowywała te zdarzenia. Pełna integracja przydaje się w przypadku gier z małymi celami dotykowymi lub gier, w których rysowanie swobodnymi ruchami jest naturalne.
Gdy renderowanie jest opóźnione w stosunku do ruchów rysika, opóźnienie jest bardziej widoczne niż w przypadku blokowania palcem lub odłączenia od ekranu, jak w przypadku klawiatury, myszy lub kontrolera. Z tego powodu Android udostępnia system renderowania pociągnięć o niskiej latencji, który pozwala na wyświetlenie położenia rysika na ekranie z opóźnieniem zaledwie 4 ms. Są 3 sposoby, w jaki gra może wykorzystać tę funkcję, aby stworzyć wrażenie bezpośredniego połączenia z rzeczywistym światem:
- Biblioteka Jetpack Ink to wygodny zestaw narzędzi do dodawania do dowolnego projektu na Androida renderowania linii dostosowujących się do ekranu.
- W przypadku gier, które nie mogą lub nie chcą polegać na komponencie Kotlin do renderowania obrysów, dostępny jest pełny kod źródłowy C++. Dzięki temu deweloperzy mogą integrować to, czego potrzebują, bezpośrednio w swojej technologii.
- W przypadku gier wymagających pełnej integracji niestandardowej można wykonywać niestandardową logikę renderowania bezpośrednio w buforze przednim, aby zmaksymalizować zarówno szybkość działania, jak i kontrolę.
Sterowanie telewizorem
![Obraz kontrolera telewizyjnego na Androida. Wyróżnione są przyciski D-pad, wybierz, mikrofon lub Asystent, Wstecz i Ekran główny.](https://developer.android.com/static/training/tv/images/tv-nav-controller.png?authuser=3&hl=pl)
Urządzenia z Androidem TV są dostarczane z pilotem z 5-kierunkową pałeczką D, która obejmuje 4 kierunki podstawowych i przycisk OK. Aplikacje korzystające z wbudowanego systemu widżetów Androida obsługują je domyślnie, ale deweloperzy muszą przetestować niestandardowe widżety w swojej grze, aby zachować zgodność z urządzeniami TV.
Więcej informacji znajdziesz w dokumentacji Androida TV.
Dodatkowe uwagi
Aby zapewnić graczom jak najlepsze wrażenia, zaprojektuj grę z uwzględnieniem różnych rodzajów danych wejściowych i przełączaj się między nimi w locie. Dzięki temu gracz może szybko przełączać się między różnymi metodami wprowadzania danych w zależności od trybu gry lub gra może łatwo przełączać się między różnymi konfiguracjami jednego urządzenia z Androidem.
Mając to na uwadze, pamiętaj:
- Sprawdzanie obecności określonego typu danych jest lepsze niż filtrowanie według formatu. Jeśli na przykład włączysz obsługę myszy i klawiatury tylko w ChromeOS, gracze na tabletach z odczepianą klawiaturą nie skorzystają z Twojego dodatkowego wysiłku.
- Na wybór najlepszego formatu danych wpływają też inne czynniki niż format. Na przykład ze względu na potrzeby związane z ułatwieniami dostępu mysz lub ekran dotykowy mogą być dla gracza trudne w użyciu, a pad lub klawiatura – idealne.
- Wszelkie wsparcie jest lepsze niż brak wsparcia. Najlepiej jest reagować na zmiany w danych wejściowych w czasie, ale gracze doceniają każdą pomoc, o ile tylko jest ona dostępna.
- Najlepszy sposób wprowadzania danych może się zmieniać w zależności od przebiegu gry. Przykładowo, ekran dotykowy jest preferowany podczas grania w grę w ruchu, gamepad, gdy telefon jest podłączony do telewizora, a mysz i klawiatura, gdy siedzisz przy biurku.
Jak reagować na dane wejściowe użytkownika
Typowe gry mobilne obsługują 1 gracza na urządzenie. Aby uzyskać najlepsze wyniki, gra reaguje na wszystkie możliwe dane wejściowe i zmienia interfejs na podstawie tego, czego aktywnie używa gracz. Dzięki temu jedna wersja gry automatycznie działa na wszystkich formatach, a gracze mogą nawet łączyć różne elementy sterowania, aby dostosować je do swoich potrzeb.
Deweloperzy często chcą mieć domyślną metodę wprowadzania z wbudowanymi opóźnieniami przed zmianą interfejsu. Co to oznacza?
- Ponieważ większość graczy korzysta z ekranów dotykowych, wyświetlaj elementy sterujące dotykiem w momencie uruchomienia. Jeśli gracz zacznie grać za pomocą klawiatury lub pada i przez jakiś czas nie będzie używać ekranu dotykowego, wyłącz warstwę dotykowa.
- Jeśli gracz używa pada i naciśnie klawisz na klawiaturze, wskazówki w grze zmienią się, aby wyświetlać przyciski klawiatury zamiast przycisków pada.
- Jeśli gracz używa jednocześnie klawiatury i kontrolera, przed przełączeniem interfejsu z jednego zestawu wskazówek na inny należy wprowadzić opóźnienie, aby uniknąć migotania ekranu.
- Podczas przetwarzania danych wejściowych sprawdź typ źródła danych wejściowych. Klawisze klawiatury i przyciski kontrolera emitują zdarzenia naciśnięcia klawisza.
- Staraj się nie oznaczać danych wejściowych jako obsługiwanych, chyba że Twoja gra może je obsłużyć. Android ponownie emituje niektóre zdarzenia, aby ułatwić zgodność z nowszymi formatami. Przykładem jest przekształcenie przycisku A kontrolera w przycisk OK.
Dodaj do pliku manifestu adnotacje dotyczące obsługi danych wejściowych
Chociaż nie jest to wymagane, warto oznaczyć flagami funkcji w pliku manifestu, jakie dane wejściowe obsługujesz. Typowe flagi to:
android.hardware.type.pc
: wyłącz warstwy zgodności dotyczące wprowadzania danych zarówno na ChromeOS, jak i na komputerze, aby umożliwić deweloperom bezpośrednie obsługiwanie wydarzeń myszy. Ustawandroid:required="false"
, aby gra była nadal dostępna na telefony.android.hardware.gamepad
: aplikacje i gry otrzymują zdarzenia związane z gamepadem niezależnie od tego, czy obsługują one te urządzenia. Zdefiniowanie tej flagi w pliku manifestu i ustawienie wartościandroid:required="false"
umożliwia wyświetlanie gry na urządzeniach z Androidem TV z podłączonymi padami do gier.
-
Producenci mogą wbudować obsługę rysika w niektórych urządzeniach, ale nie ma żadnego formatu, w którym obsługa jest gwarantowana. Tablety do rysowania można podłączyć do urządzenia z Androidem i wyświetlać jako rysiki. ↩
-
Chociaż niektóre komputery mają ekran dotykowy i obsługują rysiki, klient Gier Google Play reaguje tylko na zdarzenia myszy z systemu operacyjnego hosta. Aby zmaksymalizować zgodność, zdarzenia myszy są domyślnie wyświetlane jako zdarzenia dotykowe w kliencie. Więcej informacji znajdziesz w sekcji Wejście z myszy. ↩
-
Urządzenia z ChromeOS zwykle obsługują mysz i klawiaturę, ale ekrany dotykowe są opcjonalne. Wiele urządzeń z ekranem dotykowym obsługuje też pióro. ↩
-
System operacyjny Android Automotive odnosi się do samochodów z wbudowanym Androidem, które mogą działać bez telefonu z Androidem. Ten wykres odnosi się do systemu operacyjnego Automotive. Android Auto wyświetla aplikację z telefonu na ekranie samochodu, a urządzenia obsługujące Androida Auto (wyświetlanie) mogą nie mieć ekranu dotykowego. ↩
-
Urządzenia z Wear OS mają ograniczoną łączność. Możesz skanować urządzenia peryferyjne Bluetooth, ale system operacyjny często nie może się połączyć. ↩