打造電玩遊戲

電視螢幕列出幾個在手機遊戲中可能較陌生的考量因素 開發人員。包括大型區域、控製配置,以及所有玩家 會同時瀏覽多個元件

螢幕

針對電視畫面開發遊戲時,請牢記兩大要點 遊戲的橫向模式,並支援低延遲。

支援橫向顯示

電視一律為橫向:你無法轉動電視,也無法直向瀏覽。一律設計 以橫向模式顯示電視節目

自動低延遲模式

某些螢幕可以執行圖形後續處理。這項後續處理能改善圖像品質 但可能會增加延遲時間支援 HDMI 2.1 的新型螢幕,會自動調低音量 延遲時間模式 (ALLM),以便關閉後續處理程序,將延遲時間降到最低。適用對象 如要進一步瞭解 ALLM,請參閱 HDMI 2.1 規格。其他 螢幕可能支援具有類似行為的遊戲模式

在 Android 11 以上版本中,視窗可要求自動低延遲模式或遊戲 模式 (如有),可要求最少後續處理。這在 對遊戲和影片會議應用程式來說很實用,低延遲的優點比: 畫質最高的圖像

若想要啟用或停用最小的後續處理,請呼叫 Window.setPreferMinimalPostProcessing(), 或將視窗的 preferMinimalPostProcessing 屬性設為 true。並非所有螢幕都支援最少的後續處理作業;看看是否 特定螢幕是否支援這項功能 Display.isMinimalPostProcessingSupported() 方法。

輸入裝置

電視沒有觸控介面,因此更需要妥善控制電視及 讓玩家覺得這款遊戲符合直覺且樂趣十足。處理控制器 也會產生其他值得注意的問題,像是追蹤多個 控制器和處理方式也會妥善中斷連線。所有電視應用程式 (包括遊戲) 應能處理 控制器參閱「管理電視」 控制器,進一步瞭解電視遙控器和 處理遊戲控制器的特定 瞭解如何在遊戲中使用電視控制器。

鍵盤配置

在 Android 13 (API 級別 33) 以上版本中,您可以使用 getKeyCodeForKeyLocation()。 舉例來說,您的遊戲支援使用 WASD 按鍵動作,但可能無法正確執行 AZERTY 鍵盤,具有 A 和 W 鍵的不同位置。您可以先取得按鍵碼 您預期的鍵:

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

在這個範例中,在 AZERTY 鍵盤中,keyUp 設定為 KeyEvent.KEYCODE_ZkeyLeft已設為 KeyEvent.KEYCODE_QkeyDownkeyRight 設為 KeyEvent.KEYCODE_SKeyEvent.KEYCODE_D。您現在可以針對以下項目建立重要事件處理常式 並實作預期的行為。

命運航班

Android 資訊清單應包含一些特殊項目。

在主畫面顯示遊戲

Android TV 主畫面會將賽事和一般應用程式分開顯示。 如要讓您的遊戲顯示在遊戲清單中,請設定 android:isGame 屬性設為 "true" <application> 標記。例如:

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

宣告支援遊戲控制器

電視裝置的使用者可能無法使用或啟用遊戲控制器。為了正確地 告知使用者您的遊戲支援遊戲控制器,您必須在 應用程式資訊清單:

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

注意:指定 android:hardware:gamepad 支援時,請勿設定 設為 "true"android:required 屬性。否則使用者將無法執行以下操作 安裝您的應用程式。

如要進一步瞭解資訊清單項目,請參閱: 應用程式資訊清單

Google Play 遊戲服務

如果您的遊戲整合了 Google Play 遊戲服務, 您必須留意 以及關卡、登入及遊戲進度存檔的考量。

成就

您的遊戲至少應包含 5 個 (應得) 成就。僅限控制遊戲過程的使用者 都必須來自支援的輸入裝置,才能獲得成就。如要進一步瞭解 以及實作方式,請參閱「Android 中的成就」。

登入

遊戲應在啟動時嘗試讓使用者登入。如果玩家拒絕幾次登入 玩遊戲時,就應該停止提問如要進一步瞭解登入程序,請參閱實作登入程序: Android

儲存中

使用 Google Play 服務遊戲進度存檔儲存資料 您的遊戲必須將遊戲資料繫結至特定 Google 帳戶,如 可在各種裝置上輕鬆識別:玩家使用手機或電視時, 遊戲都應該能夠從同一個使用者帳戶擷取遊戲儲存資訊。

您也應該在遊戲 UI 中提供選項,讓玩家在本機刪除並 雲端儲存的資料。您或許可以將這個選項放在遊戲的 Settings 畫面中。適用對象 如需瞭解如何使用 Play 服務實作遊戲進度存檔,請參閱「Android 中的遊戲進度存檔」。

結束

提供一致且明顯的 UI 元素,讓使用者能優雅退出遊戲。這個 元素應可透過 D-Pad 導覽按鈕存取。建議您採用這種做法 主畫面按鈕用於提供退出,因為在不同控制器之間不一致或不可靠。

網路

請勿啟用 Android TV 遊戲的網頁瀏覽功能。Android TV 不支援網路瀏覽器。

注意:您可以使用 WebView 類別登入 社群媒體服務

網路

遊戲通常需要更高的頻寬才能達到最佳效能,而且許多使用者偏好 才能提供這種效能您的應用程式應檢查 Wi-Fi 和乙太網路 連線狀態。如果您的應用程式僅適用於電視,您不需要像檢查 3G/LTE 服務一樣 在行動應用程式中實際操作