Gry związane z tworzeniem TV

Ekran telewizora przedstawia elementy, które mogą być nowe w świecie gier mobilnych dla programistów. Należą do nich m.in. ich duży rozmiar, schemat sterowania i fakt, którzy oglądają go jednocześnie.

Wyświetlacz

Dwie główne kwestie, o których należy pamiętać przy tworzeniu gier na telewizor, to projektowanie w orientacji poziomej i zapewnia obsługę niewielkiego opóźnienia.

Obsługa wyświetlania w orientacji poziomej

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. To rozwiązanie 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. Dla: więcej informacji o ALLM znajdziesz tutaj Specyfikacja HDMI 2.1 Inny powód 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 istotne przydatny w grach i aplikacjach do rozmów wideo, w których małe opóźnienie jest ważniejsze niż z najlepszą możliwą grafiką.

Aby włączyć lub wyłączyć minimalne przetwarzanie końcowe, wywołaj Window.setPreferMinimalPostProcessing(), lub ustaw okno preferMinimalPostProcessing do wartości 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 pojawiają się też inne kwestie, na które należy zwrócić uwagę, takie jak śledzenie wielu i płynnego rozłączania się z innymi urządzeniami. Wszystkie aplikacje na telewizory, w tym gry, powinny obsługiwać dla administratorów. 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, których oczekujesz 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 w przypadku klawiatury AZERTY ustawienie keyUp ma wartość KeyEvent.KEYCODE_Z w polu keyLeft ustawiono formułę KeyEvent.KEYCODE_Q, a keyDown i keyRight są ustawione na KeyEvent.KEYCODE_S i KeyEvent.KEYCODE_D. Teraz możesz tworzyć moduły obsługi kluczowych zdarzeń dla tych 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 Twoja gra pojawiła się na liście gier, ustaw parametr Atrybut android:isGame do "true" w pliku manifestu aplikacji <application> . Na przykład:

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

Zadeklaruj obsługę kontrolerów do 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 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 wpisach pliku manifestu znajdziesz w artykule Plik manifestu aplikacji.

Usługi gier Google Play

Jeśli gra zawiera Usługi gier Google Play, należy pamiętać o wielu kwestii związanych z osiągnięciami, logowaniem się i zapisywaniem gier.

Osiągnięcia

Gra powinna zawierać co najmniej 5 osiągnięć (możliwych do zdobycia). Tylko użytkownik kontroluje rozgrywkę z obsługiwanego urządzenia wejściowego powinny być w stanie zdobywać osiągnięcia. Więcej informacji na temat: osiągnięcia i sposób ich wykorzystania 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 razy z rzędu gra nie powinna już pytać. Więcej informacji o logowaniu znajdziesz w artykule Wdrażanie logowania na na urządzeniu z Androidem.

Zapisuję

używać zapisanych gier w Usługach Google Play do przechowywania. zapisu stanu 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 powinna być też dostępna opcja umożliwiająca graczowi usunięcie lokalnie i danych przechowywanych 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

Zadbaj o spójny i wyraźny element interfejsu, dzięki któremu użytkownik może płynnie wyjść z gry. Ten element powinien być dostępny za pomocą przycisków nawigacyjnych na padzie kierunkowym. 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żyć do logowania się, aby: serwisach 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 sprawdzać 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.