Twórz gry na wszystkie urządzenia

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 do true 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 na 2.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ę: