Gry związane z tworzeniem TV

Ekran telewizora przedstawia elementy, które mogą być nowe w świecie gier mobilnych dla programistów. Dotyczy to dużych rozmiarów, schematu sterowania i tego, że wszyscy gracze oglądają go jednocześnie.

Wyświetlacz

Podczas tworzenia gier na telewizor należy pamiętać o 2 głównych kwestiach: zaprojektowaniu gry pod kątem orientacji poziomej i zapewnieniu obsługi niskiej latencji.

Obsługa wyświetlania poziomego

Telewizor jest zawsze ustawiony bokiem – nie można go obrócić i nie ma orientacji pionowej. Zawsze projektuj aby grać na telewizorze w trybie poziomym.

Automatyczny tryb niskiego opóźnienia

Niektóre ekrany mogą przetwarzać grafiki na później. Ten proces poprawia jakość grafiki, ale może zwiększyć opóźnienie. Nowsze ekrany obsługujące HDMI 2.1 mają automatyczną funkcję niskiego poziomu trybu oczekiwania (ALLM), który minimalizuje opóźnienie dzięki wyłączeniu tego procesu końcowego. Więcej informacji o ALLM znajdziesz w specyfikacji HDMI 2.1. Inne wyświetlacze mogą obsługiwać tryb gry o podobnym działaniu.

Na urządzeniu z Androidem 11 i nowszym oknem może być żądanie włączenia gry lub trybu automatycznego niskiego opóźnienia tryb używany, jeśli jest dostępny, wymagając minimalnego przetwarzania końcowego. Jest to szczególnie przydatne w przypadku aplikacji do gier i konferencji wideo, w których przypadku krótki czas opóźnienia jest ważniejszy niż jakość grafiki.

Aby włączyć lub wyłączyć minimalne przetwarzanie po wykonaniu obliczeń, wywołaj funkcję Window.setPreferMinimalPostProcessing() lub ustaw atrybut preferMinimalPostProcessing okna na wartość true. Nie wszystkie ekrany obsługują minimalne przetwarzanie danych. aby dowiedzieć się, czy obsługuje go określony wyświetlacz, należy wywołać funkcję Metoda Display.isMinimalPostProcessingSupported().

Urządzenia wejściowe

Telewizory nie mają interfejsów dotykowych, dlatego jeszcze ważniejsze jest odpowiednie sterowanie i upewniać się, że gra jest intuicyjna i przyjemna w użyciu. Obsługa kontrolerów powoduje też inne problemy, na które należy zwrócić uwagę, takie jak śledzenie wielu kontrolerów i odłączanie ich. Wszystkie aplikacje na telewizory, w tym gry, powinny obsługiwać kontrolery w spójny sposób. Przeczytaj artykuł Zarządzanie telewizorem kontrolerów. Obsługuj kontrolery do gier w konkretnych Informacje o korzystaniu z kontrolerów telewizora do gier.

Układy klawiatury

W Androidzie 13 (poziom interfejsu API 33) i nowszych możesz określić układy klawiatury za pomocą getKeyCodeForKeyLocation() Na przykład Twoja gra umożliwia ruch przy użyciu klawiszy WASD, ale ta funkcja może nie działać prawidłowo na klawiaturę AZERTY z klawiszami A i W rozmieszczonymi w różnych miejscach. Możesz pobrać kody dla kluczy oczekiwanych w określonych pozycjach:

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);
}

W tym przykładzie, przy klawiaturze AZERTY, klawisz keyUp ma wartość KeyEvent.KEYCODE_Z, keyLeft – KeyEvent.KEYCODE_Q, a keyDownkeyRight – odpowiednio KeyEvent.KEYCODE_SKeyEvent.KEYCODE_D. Możesz teraz tworzyć moduły obsługi kluczowych zdarzeń dla tych kodów kluczy i wdrażać oczekiwane działanie.

Plik manifestu

Gry powinny zawierać w manifeście Androida kilka specjalnych elementów.

Pokaż grę na ekranie głównym

Gry na ekranie głównym Androida TV znajdują się w osobnym rzędzie niż zwykłe aplikacje. Aby gra była widoczna na liście gier, w pliku manifestu aplikacji ustaw atrybut android:isGame na "true" w tagu <application> . Na przykład:

<application
    ...
    android:isGame="true"
    ...
>

Zadeklaruj obsługę kontrolerów gier

Kontrolery do gier mogą być niedostępne lub niedostępne dla użytkowników telewizorów. Aby informacje poinformuj użytkowników, że Twoja gra obsługuje kontroler do gier, w polu manifestu aplikacji:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

Uwaga: określając zakres obsługi android:hardware:gamepad, nie ustawiaj parametru android:required do "true". Jeśli to zrobisz, użytkownicy nie będą mogli: zainstalować ją na telewizorach.

Więcej informacji o elementach pliku manifestu znajdziesz w artykule Plik manifestu aplikacji.

Usługi gier Google Play

Jeśli Twoja gra jest zintegrowana z usługami gier Google Play, musisz wziąć pod uwagę kilka kwestii dotyczących osiągnięć, logowania i zapisywania gier.

Osiągnięcia

Gra powinna zawierać co najmniej 5 (możliwych do zdobycia) osiągnięć. Tylko użytkownik, który steruje rozgrywką za pomocą obsługiwanego urządzenia wejściowego, powinien mieć możliwość zdobywania osiągnięć. Więcej informacji o osiągnięciach i sposobach ich implementowania znajdziesz w artykule Osiągnięcia na Androidzie.

Zaloguj się

Gra powinna próbować zalogować użytkownika przy uruchomieniu. Jeśli gracz odmówi zalogowania się kilka razy z rzędu, gra nie będzie już tego robić. Więcej informacji o logowaniu się znajdziesz w artykule Wdrażanie logowania na Androidzie.

Zapisuję

Używaj usług Google Play Zapisanych gier do przechowywania zapisanych stanów gry. Gra powinna przypisywać zapisy gry z konkretnym kontem Google, aby można łatwo zidentyfikować nawet na różnych urządzeniach: niezależnie od tego, czy odtwarzacz korzysta z telefonu czy telewizora, gra powinna mieć możliwość pobrania informacji o zapisie gry z tego samego konta użytkownika.

W interfejsie gry powinieneś też udostępnić opcję, która pozwoli graczowi usunąć dane przechowywane lokalnie i w chmurze. Możesz umieścić tę opcję na ekranie gry Settings. Dla: szczegółowe informacje o implementowaniu zapisanych gier w Usługach Google Play znajdziesz w artykule Zapisane gry na Androidzie.

Zakończ

Dodaj spójny i wyraźny element interfejsu, który pozwala użytkownikowi wygodnie wyjść z gry. Ten element powinien być dostępny za pomocą przycisków nawigacyjnych. Zrób to, zamiast polegać na Przycisk ekranu głównego do wyświetlania wyjścia, ponieważ nie jest on spójny i niezawodny w przypadku różnych kontrolerów.

Sieć

Nie włączaj przeglądania internetu w grach na Androida TV. Android TV nie obsługuje przeglądarki.

Uwaga: klasy WebView możesz używać do logowania się w usługach mediów społecznościowych.

Sieć

Gry często potrzebują większej przepustowości, aby zapewnić optymalną wydajność, i wielu użytkowników woli połączenie Ethernet z siecią Wi-Fi w celu zapewnienia odpowiedniej wydajności. Aplikacja powinna sprawdzić połączenie Wi-Fi i Ethernet połączeń. Jeśli aplikacja jest przeznaczona tylko na telewizor, nie musisz sprawdzać dostępności usługi 3G/LTE, dla aplikacji mobilnej.