電視螢幕會顯示一些考量事項,這些事項對行動遊戲開發人員來說可能很新穎。包括大型區域、控製配置,以及所有玩家 會同時瀏覽多個元件
螢幕
針對電視畫面開發遊戲時,請牢記兩大要點 遊戲的橫向模式,並支援低延遲。
支援橫向顯示
電視一律為橫向:你無法轉動電視,也無法直向瀏覽。請一律將 TV 遊戲設計為以橫向模式顯示。
自動低延遲模式
某些螢幕可執行圖像後製處理。這項後續處理能改善圖像品質 但可能會增加延遲時間支援 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 主畫面會將遊戲獨立一列顯示,和一般應用程式區隔。如要讓您的遊戲顯示在遊戲清單中,請設定
將 android:isGame
屬性設為 "true"
<application>
標記。例如:
<application ... android:isGame="true" ... >
宣告支援遊戲控制器
電視裝置的使用者可能無法使用或啟用遊戲控制器。為了正確地 告知使用者您的遊戲支援遊戲控制器,您必須在 應用程式資訊清單:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
注意:指定 android:hardware:gamepad
支援功能時,請勿將 android:required
屬性設為 "true"
。否則使用者將無法執行以下操作
安裝您的應用程式。
如要進一步瞭解資訊清單項目,請參閱「應用程式資訊清單」。
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 服務,這與行動應用程式不同。