Przy opracowywaniu gry na Androida należy przygotować się na różnorodność możliwość dostosowania się do sytuacji w czasie rzeczywistym, do potrzeb interakcji. Wspierając różne gry graczy, elastyczność rozgrywki, co pomaga zwiększyć zasięg gry.
Szczególne różnice w obsłudze graczy to między innymi:
- Formaty urządzenia: chociaż telefony z tradycyjnych telefonów z Androidem umożliwia interakcję z grami na innych urządzeniach. Na urządzeniach z ChromeOS można uruchomić kontener Androida wyświetlający grę. tablety, który może działać na Androidzie, obsługuje kilka różnych poziomów wierności. Android TV, i obsługują więcej szczegółów i są bardziej atrakcyjne. Gracze mogą za pomocą narzędzia rozszerzenia wyświetlacza symuluj środowisko wielu okien. A kiedy jeśli używasz urządzeń składanych, gracze mogą zmieniać rozmiar ekranu podczas rozgrywki. .
- Metody interakcji: gracze mogą wprowadzić dane, dotykając ekranu urządzenia ekranu, ale można też używać myszy, touchpada, klawiatury lub kontrolera. . Ponadto dostępność narzędzi rozszerzeń displayowych na większym ekranie, dzięki czemu gry sesji rozgrywki i bardziej złożonych interfejsów.
- Obsługa sprzętu: niektóre urządzenia z Androidem nie mają bardziej typowe dla urządzeń mobilnych, takich jak tylny aparat, GPS czy połączenia sieciowe. Gra powinna dostosowywać się do dostępnego sprzętu. a także sprawnie reagować na sytuacje, w których pewne funkcje są niedostępne.
W tym przewodniku znajdziesz sprawdzone metody tworzenia gier pod kątem różnych różne rodzaje ekranów i interakcje z użytkownikami. W przewodniku znajdują się również sugestie dotyczące zaprojektowaniem gry i opracowaniem skutecznej strategii testowania.
Sprawdzone metody projektowania gier
Podczas planowania wyglądu i architektury gry postępuj zgodnie ze sprawdzonymi metodami opisane w dalszej części tego artykułu.
Ręczne reagowanie na zmiany w konfiguracji
Gdy system Android wykryje zmianę konfiguracji, na przykład zmianę ustawień
rozmiaru ekranu, orientacji ekranu lub metody wprowadzania, system domyślnie uruchomi się ponownie.
bieżącej aktywności. Aby zachować stan w aplikacji lub grze, aktywność
połączenia domyślne
onSaveInstanceState()
przed ponownym uruchomieniem,
onRestoreInstanceState()
po ponownym uruchomieniu. Ten proces wymaga jednak ponownego załadowania wszystkich elementów
powiązanych usług i zasobów. Aby dowiedzieć się więcej o tym domyślnym działaniu,
zapoznaj się z przewodnikiem po konfiguracji
zmian.
Typowa sesja rozgrywki podlega kilku zmianom w konfiguracji. Jeśli Twoja gra umożliwia systemowi obsługę każdej zmiany konfiguracji, a scena gry zostaje zniszczona i wielokrotnie były ponownie uruchamiane, co zmniejszało jej wydajność. Z tego powodu zdecydowanie zachęcamy do samodzielnego wprowadzenia tych zmian w konfiguracji Twojej gry.
Aby dowiedzieć się, jak dodać do gry taką zmianę konfiguracji, przeczytaj jak utworzyć niestandardową zmianę konfiguracji .
Tworzenie elastycznej architektury
Aby dodać obsługę gry na jak największej liczbie urządzeń, postępuj zgodnie z tymi wskazówkami metody:
- Wdrażaj pakiety Android App Bundle zamiast poszczególnych plików APK. Aplikacja na Androida Pakiety umożliwiają pakowanie artefaktów różnych rozdzielczości i różnych modeli architektury, np. x86, ARM, artefaktu. Co więcej, pakiety Android App Bundle obsługują wyższe limity rozmiaru gra; każdy podstawowy plik APK może mieć maksymalnie 150 MB, a sam pakiet może mieć ich wiele. i liczyć gigabajty.
- Dodaj obsługę architektur x86. Ten krok poprawi poziom jakości gry wydajności na urządzeniach bez architektur ARM, wykonywać instrukcje bez konieczności ich tłumaczenia.
Dodaj obsługę interfejsu Vulkan
Dzięki obsłudze Vulkan gra może osiągać lepsze wyniki wydajność grafiki. Większość urządzeń obsługuje ten interfejs API.
Tworzenie niestandardowych modułów obsługi zmian konfiguracji
Aby zadeklarować typy zmian w konfiguracji, które obsługuje sama gra, dodaj
android:configChanges
do każdego elementu <activity>
w pliku manifestu, który reprezentuje ekran
lub skomplikowanego interfejsu.
Ten fragment kodu pokazuje, jak zadeklarować, że gra jest w porządku rozmiaru ekranu, orientacji ekranu i metod wprowadzania:
<activity ... android:configChanges="screenSize|orientation|keyboard|keyboardHidden"> </activity>
Po wystąpieniu zadeklarowanej konfiguracji system wywołuje teraz polecenie
inną metodą,
onConfigurationChanged()
W ramach tej metody dodaj funkcje logiczne, aby zaktualizować interfejs użytkownika gry:
- Zaktualizuj współczynnik skali i orientację ekranu. Pamiętaj, że w przypadku w celach związanych z wydajnością, czasem lepiej przeskalować interfejs gry tylko jeden wymiar.
- Określ optymalną metodę wprowadzania tekstu dla odtwarzacza.
Obsługa zmian w konfiguracji ekranu
Twoja gra ręcznie zmienia rozmiar i orientację ekranu za każdym razem,
umieszczasz wartości screenSize
i orientation
odpowiednio w funkcji
android:configChanges
.
. Możesz użyć tych nowych wartości do aktualizacji zawartości sceny
obszarów wprowadzania danych odtwarzacza. Wskazówki dotyczące projektowania układu gry
aktualizację można ułatwić, zapoznaj się z przewodnikiem na temat obsługi różnych urządzeń
.
W implementacji gry onConfigurationChanged()
użyj przekazywanych
Configuration
i
menedżera okien Display
.
określanie zaktualizowanych wartości rozmiaru i orientacji ekranu,
.
Ten fragment kodu pokazuje, jak uzyskać zaktualizowany rozmiar ekranu gry i orientację.
Kotlin
override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) val density: Float = resources.displayMetrics.density val newScreenWidthPixels = (newConfig.screenWidthDp * density).toInt() val newScreenHeightPixels = (newConfig.screenHeightDp * density).toInt() // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or // Configuration.ORIENTATION_LANDSCAPE. val newScreenOrientation: Int = newConfig.orientation // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180, // or ROTATION_270. val newScreenRotation: Int = windowManager.defaultDisplay.rotation }
Java
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float density = getResources().getDisplayMetrics().density; int newScreenWidthPixels = (int) (newConfig.screenWidthDp * density); int newScreenHeightPixels = (int) (newConfig.screenHeightDp * density); // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or // Configuration.ORIENTATION_LANDSCAPE. int newScreenOrientation = newConfig.orientation; // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180, // or ROTATION_270. int newScreenRotation = getWindowManager().getDefaultDisplay() .getRotation(); }
Pamiętaj, że zmiana pozycji urządzenia składanego zmienia konfigurację. nawet jeśli aplikacja działa w trybie pełnoekranowym. Możliwe, że aplikacja będzie musiała reagować na zmiany rozmiaru ekranu lub pikseli. podczas składania i otwierania urządzenia podczas uruchamiania gry.
Jakość ekranu w przypadku gry
W sekcjach poniżej opisano, jak dostosować reakcję gry na ekran. rozmiaru lub orientacji ekranu w zależności od jakości gry:
Tryb pełnoekranowy
Na niektórych platformach, takich jak ChromeOS, aplikacje i gry na Androida mogą być wyświetlane w oknach
których rozmiar jest domyślnie możliwy do zmiany. Jeśli gra powinna zawsze działać w trybie pełnoekranowym,
może ustawić
android:resizeableActivity
atrybut false
w jednym z elementów <activity>
, jak to widać w
ten fragment kodu:
<activity ... android:resizeableActivity="false"> </activity>
Możesz też ustawić wartość false
atrybutu android:resizeableActivity
, aby zapobiec
zmian konfiguracji opartych na rozmiarze. Jeśli jednak gra nie zawsze działa w trybie pełnoekranowym, dodaj ten atrybut tylko jako tymczasową poprawkę.
do celów testowych.
Orientacja ekranu
Jeśli gra korzysta z czujników w określonej orientacji,
określ wartość dla
android:screenOrientation
in
aktywność w grze, zgodnie z poniższym fragmentem kodu. To ustawienie pomaga
Zapobiegaj niespodziewanemu obróceniu sceny w grze do góry nogami.
<activity ... android:screenOrientation="landscape"> </activity>
Jakość ekranu specyficzna dla urządzenia
W sekcjach poniżej opisano, jak wprowadzać zmiany w konfiguracji na podstawie ekranu o określonych cechach charakterystycznych dla niektórych urządzeń.
Format obrazu
Niektóre urządzenia obsługują różne formaty obrazu. Na przykład urządzenia składane są zaprojektowany z myślą o obsłudze formatu obrazu 21:9 po złożeniu. Do obsługi tę potencjalną różnorodność w współczynniku proporcji, wykonaj co najmniej jedną z tych czynności:
- Kieruj aplikację na Androida 8.0 (poziom interfejsu API 26) lub nowszego.
- Zmień rozmiar sceny i interfejsu gry. Ustaw
android:resizeableActivity
dotrue
na urządzeniach z Androidem 7.0 (poziom interfejsu API 24) lub nowszym. Zadeklaruj maksymalny obsługiwany format obrazu. W Powiązany atrybut
<meta-data>
ustaw wartośćandroid.max_aspect
na2.4
w grze, jak w tym przykładzie fragment kodu. Pamiętaj jednak, że formaty obrazu są większe niż przyczyna pojawienia się gry letterbox w ramach wyświetlacza.<application> <meta-data android:name="android.max_aspect" android:value="2.4" /> </application>
Wiele aktywności widocznych jednocześnie
Wiele nowoczesnych urządzeń obsługuje różne układy ekranu, w tym obraz w obrazie i duże obszary wyświetlania. Jeśli używasz jednego z tych układów, system może pokazać wiele aktywności jednocześnie.
Na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym możliwe jest
widoczne działania, które można wznowić w tym samym czasie. Aby takie działanie
jednak zarówno gra, jak i producent urządzenia muszą wyrazić zgodę na
funkcji. Możesz dodać obsługę w swojej grze, ustawiając:
Z android.allow_multiple_resumed_activities
na true
w pliku manifestu gry,
jak w tym fragmencie:
<application> <meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" /> </application>
Następnie możesz przetestować grę na różnych urządzeniach, aby sprawdzić, które z nich zapewniają pomoc OEM, która jest niezbędna do prawidłowego działania wielokrotnego wznowienia.
Więcej informacji o konfigurowaniu gry, by była częścią tryb wielu okien, przeczytaj przewodnik na temat jego dodawania. pomocy.
Omów różne typy modeli interakcji
Gra ręcznie obsługuje obecność klawiatury i jej dostępność, gdy tylko chcesz
umieszczasz wartości keyboard
i keyboardHidden
odpowiednio w funkcji
android:configChanges
.
. Możesz użyć tych nowych wartości, aby zaktualizować główne dane wejściowe gry
.
Konfigurując grę pod kątem obsługi różnych rodzajów danych wejściowych użytkownika, zachowaj atrybut o których warto pamiętać:
- Wykrywaj metody wprowadzania zamiast poszczególnych urządzeń. Takie podejście sprawia, poprawić wrażenia graczy, nie skupiając się za bardzo na konkretnego urządzenia, z którego może korzystać odtwarzacz.
- Umieść atrybut
keyboardHidden
na liście obsługiwanych ręcznie. zmiany konfiguracji. Dzięki temu gra może śledzić, kiedy klawiatura jest fizycznie przymocowana do urządzenia, ale bezużyteczna. Określ metody wprowadzania, które są obecnie dostępne. Aby to zrobić, zadzwoń:
getInputDeviceIds()
podczas uruchamiania gry i po każdej zmianie konfiguracji.Często możesz mieć wpływ na to, jak gracz planuje wejść w interakcję z grą. na podstawie preferowanego urządzenia wejściowego:
- Gracze zwykle używają klawiatury lub kontrolera do gier, aby szybko wykonywać różne działania. sekwencji przycisków.
- Do grania w bardziej złożony sposób gracze zwykle używają ekranu dotykowego lub touchpada. gestami.
- Gracze używają zwykle myszy do wprowadzania danych z większą precyzją.
W poniższych sekcjach znajdziesz sprawdzone metody dotyczące różnych typów danych wejściowych urządzenia.
Klawiatura
Tworząc układ klawiatury do gry, weź pod uwagę to, jak będzie się poruszać gracz. w danej scenie, a także jak wpływają na ustawienia gry.
Klawisze WASD i klawisze strzałek zwykle najlepiej sprawdzają się do sterowania ruchem znaków. Dobrze jest też przypisać klucz do poszczególnych ważnych działań i umiejętności. które kontroluje postać w grze. Aby zmaksymalizować dla graczy, rozważ dodanie obsługi niestandardowych powiązań klawiszy w grze.
Gracze powinni też mieć możliwość otwierania menu gry i poruszania się po nich
za pomocą klawiatury. Klawisz Esc
jest typowym mapowaniem do wstrzymywania sceny i
które wyświetla menu gry.
Więcej informacji o obsłudze wprowadzania tekstu z klawiatury w grze znajdziesz w przewodniku jak obsługiwać nawigację za pomocą klawiatury oraz przewodnik po obsłudze klawiatury czynności.
Kontroler do gier
Więcej informacji o obsłudze danych wejściowych kontrolera w grze znajdziesz w przewodniku o obsłudze kontrolerów do gier.
Mysz lub touchpad
Jeśli Twoja gra obsługuje wprowadzanie tekstu z użyciem myszy lub touchpada, pamiętaj, gracze korzystają z urządzenia w inny sposób niż z grą. Jest pamiętaj, że żądanie przechwycenia wskaźnika powoduje, że cały ruch myszą do gry. Dlatego gdy gra zbierze potrzebne informacje, zwalniania wskaźnika, by gracze mogli normalnie sterować myszą urządzenia.
Na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) lub nowszym możesz używać myszy
Interfejs Capture API wspomagający proces przechwytywania wskaźnika. W grach, które reagują na
możesz określić aktualne współrzędne kursora, wywołując
getX()
oraz
getY()
.
Dodatkowe informacje o tym, jak dodać obsługę wprowadzania danych za pomocą myszy i touchpada. w grze, zapoznaj się z przewodnikiem na temat śledzenia dotknięć i wskaźników oraz poradami, jak postępować w przypadku gesty wielodotykowe.
Testowanie gry
Zanim wprowadzisz grę, sprawdź, jak reaguje na zmiany w konfiguracji, wykonując czynności opisane w poniższych sekcjach.
Zaktualizuj plan testów
Podczas weryfikowania funkcji gry uwzględnij te przypadki testowe:
- Zminimalizuj i zmaksymalizuj okno zawierające grę. (Nie ma zastosowania, jeśli gra zawsze działa w trybie pełnoekranowym).
- Zmień rozmiar ekranu.
- Zmień orientację ekranu. (Nie dotyczy, jeśli gra ma stałą ).
- Umożliwiają podłączanie i odłączanie urządzeń wejściowych, takich jak klawiatury i myszy.
- Wielokrotne wznawianie (jeśli gra obsługuje tę funkcję).
Rozważ też zaktualizowanie systemu kontroli jakości w grze, by mieć pewność, zoptymalizować ją pod kątem różnych graczy.
Sprawdzone metody testowania gry znajdziesz w Przewodnik dotyczący testowania.
Korzystanie z narzędzi do testowania i debugowania
Możesz przeprowadzać testy za pomocą różnych narzędzi obsługiwanych przez platformę:
emulatory, w tym emulator Androida czy Laboratorium Firebase.
Wydajność ChromeOS Analizatora, jest dostępna w systemie ChromeOS M75 lub nowszym.