電視螢幕呈現的許多考量因素,對手遊開發人員來說可能很陌生。包括尺寸較大、控制方式,以及所有玩家同時觀看等。
螢幕
為電視螢幕開發遊戲時,有兩大要點需要注意:為橫向螢幕模式設計遊戲,以及支援低延遲。
支援橫向顯示器
電視一律為橫向,無法轉動,也沒有直向模式。請務必將電視遊戲設計為以橫向模式顯示。
自動低延遲模式
某些螢幕可以執行圖形後製處理。這項後置處理作業可提升圖像品質,但可能會增加延遲時間。支援 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_Z,keyLeft 設為 KeyEvent.KEYCODE_Q,keyDown 和 keyRight 則分別設為 KeyEvent.KEYCODE_S 和 KeyEvent.KEYCODE_D。現在,您可以為這些按鍵碼建立按鍵事件處理常式,並實作預期行為。
資訊清單
遊戲應在 Android 資訊清單中加入一些特殊項目。
在主畫面上顯示遊戲
Android TV 主畫面會將遊戲獨立一列顯示,和一般應用程式區隔。如要讓遊戲顯示在遊戲清單中,請在應用程式資訊清單的 <application>
標記中,將
android:isGame 屬性設為 "true"。例如:
<application ... android:isGame="true" ... >
宣告支援遊戲控制器
電視裝置使用者可能無法使用或啟用遊戲控制器。如要正確告知使用者您的遊戲支援遊戲控制器,您必須在應用程式資訊清單中加入下列項目:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
注意:指定 android.hardware.gamepad 支援時,如果遊戲也可以使用標準電視遙控器 (D-pad) 玩,請將 android:required 屬性設為 "false"。只有在遊戲必須使用遊戲控制器才能玩時,才將 android:required 設為 "true"。設定 android:required="true" 會在 Android TV 的 Google Play 上顯示「需要遊戲手把」徽章和預先安裝警告,而不是封鎖在電視裝置上安裝。
如要進一步瞭解資訊清單項目,請參閱「應用程式資訊清單」。
Google Play 遊戲服務
如果遊戲整合了 Google Play 遊戲服務,請注意成就、登入和遊戲進度存檔等相關事項。
成就
遊戲應至少包含五個 (可獲得的) 成就。只有使用支援的輸入裝置控制遊戲玩法的玩家,才能獲得成就。如要進一步瞭解成就及如何實作成就,請參閱「Android 中的成就」。
登入
遊戲啟動時,應嘗試登入使用者。如果玩家連續多次拒絕登入,遊戲應停止詢問。如要進一步瞭解登入功能,請參閱「在 Android 上導入登入功能」。
儲存中
使用 Google Play 服務遊戲進度存檔功能儲存遊戲進度。遊戲應將遊戲存檔繫結至特定 Google 帳戶,以便在不同裝置上也能明確識別:無論玩家使用的是手機還是電視,遊戲都應能從同一個使用者帳戶提取遊戲存檔資訊。
您也應在遊戲 UI 中提供選項,讓玩家刪除本機和雲端儲存的資料。您可以在遊戲的 Settings 畫面中加入這個選項。如要瞭解如何使用 Play 服務實作遊戲進度存檔功能,請參閱「Android 遊戲進度存檔」。
結束
提供一致且明顯的 UI 元素,讓使用者能順利退出遊戲。這個元素應可透過 D-pad 導覽按鈕存取。請使用這個方法,不要依賴首頁按鈕提供結束功能,因為不同遙控器提供的功能不一致,也不可靠。
網頁
請勿在 Android TV 遊戲中啟用網頁瀏覽功能。Android TV 不支援網路瀏覽器。
注意:您可以使用 WebView 類別登入社群媒體服務。
網路
遊戲通常需要較高的頻寬才能提供最佳效能,許多使用者偏好使用乙太網路而非 Wi-Fi,以提供這種效能。應用程式應同時檢查 Wi-Fi 和乙太網路連線。如果應用程式僅適用於電視,則不必像行動應用程式一樣檢查 3G/LTE 服務。