電視螢幕有一些考量事項,這對手機遊戲開發人員來說可能是新手,這些區域包括更大的尺寸、控製配置,以及所有玩家同時正在瀏覽的內容。
螢幕
為電視螢幕開發遊戲時,請務必記住兩大重點,也就是為遊戲設計橫向螢幕方向,以及支援低延遲。
支援橫向顯示
電視始終保持方向並排:無法轉動,而且不支援直向。請一律將電視遊戲設計為以橫向模式顯示。
自動低延遲模式
特定螢幕可以執行圖形後續處理作業。這種後續處理作業可提高圖像品質,但可能會增加延遲時間。新版支援 HDMI 2.1 的新版螢幕具備自動低延遲模式 (ALLM),您只要關閉後續處理即可,將延遲時間縮到最短。如要進一步瞭解 ALLM,請參閱 HDMI 2.1 規格。其他螢幕可能支援具有類似行為的遊戲模式。
在 Android 11 以上版本中,視窗可以要求最少處理,要求使用自動低延遲模式或遊戲模式 (如有)。這對於遊戲和視訊會議應用程式特別實用,因為低延遲比擁有最佳圖像更重要。
如要啟用或停用最少的後續處理,請呼叫 Window.setPreferMinimalPostProcessing()
,或是將視窗的 preferMinimalPostProcessing
屬性設為 true
。並非所有螢幕都支援最少的後續處理作業;如要瞭解特定螢幕是否支援此功能,請呼叫 Display.isMinimalPostProcessingSupported()
方法。
輸入裝置
電視沒有觸控介面,因此更重要的是,妥善設定控制項,並確保玩家能覺得符合直覺且有趣好上手。處理控制器也會造成一些其他問題,需要您留意,例如追蹤多個控制器,以及妥善處理中斷連線的狀況。所有電視應用程式 (包括遊戲) 都應以一致的方式處理控制器。想進一步瞭解如何使用電視控制器,請參閱「管理電視控制器」和「處理遊戲控制器」一文,進一步瞭解使用電視控制器玩遊戲的具體資訊。
鍵盤配置
在 Android 13 (API 級別 33) 以上版本中,您可以使用 getKeyCodeForKeyLocation()
判斷鍵盤版面配置。舉例來說,遊戲支援使用 WASD 按鍵移動,但 AZERTY 鍵盤的 AZERTY 鍵盤可能位於不同位置,這可能無法正常運作。您可以在特定位置取得預期金鑰的按鍵碼:
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 TV 主畫面會以獨立的一列顯示遊戲,和一般應用程式區隔。如要讓遊戲顯示在遊戲清單中,請在應用程式資訊清單的 <application>
標記中,將
android:isGame
屬性設為 "true"
。例如:
<application ... android:isGame="true" ... >
宣告支援遊戲控制器
電視裝置使用者可能無法使用或啟用遊戲控制器。為了讓使用者知道您的遊戲支援遊戲控制器,您必須在應用程式資訊清單中加入下列項目:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
注意:指定 android:hardware:gamepad
支援時,請勿將 android:required
屬性設為 "true"
,移除後,使用者就無法在電視裝置上安裝您的應用程式。
如要進一步瞭解資訊清單項目,請參閱「應用程式資訊清單」。
Google Play 遊戲服務
如果您的遊戲整合了 Google Play 遊戲服務,那麼關於關卡、登入和儲存遊戲時,您應該留意一些注意事項。
成就
您的遊戲至少應包含五個關卡。使用者必須使用支援的輸入裝置控制遊戲過程,才能獲得成就。如要進一步瞭解成就和實作方式,請參閱「Android 中的成就」。
登入
遊戲應會在啟動時嘗試登入使用者。如果玩家連續拒絕登入數次,遊戲應停止詢問。如要進一步瞭解登入功能,請參閱在 Android 實作登入功能的說明。
儲存中
使用 Google Play 服務的遊戲進度存檔儲存遊戲存檔。您的遊戲應繫結儲存的特定 Google 帳戶,確保即使在各個裝置上也能明確識別遊戲:玩家無論使用手機或電視,都應可從相同的使用者帳戶提取遊戲儲存資訊。
建議你也在遊戲 UI 中提供選項,讓玩家刪除本機和雲端儲存的資料。您可能會將選項放入遊戲的 Settings
畫面。如需使用 Play 服務實作遊戲進度存檔的詳細資訊,請參閱 Android 中的遊戲進度存檔。
結束
提供一致且明顯的 UI 元素,讓使用者輕鬆結束遊戲。此元素應可透過 D-Pad 導覽按鈕存取。執行這項操作時,請勿仰賴主畫面按鈕來結束事件,因為不同控制器之間的資訊不一致,也不一致。
網頁
不要為 Android TV 遊戲啟用網頁瀏覽功能。Android TV 不支援網路瀏覽器。
注意:您可以使用 WebView
類別登入社群媒體服務。
網路
遊戲通常需要更高的頻寬才能提供最佳效能,而許多使用者偏好透過乙太網路提供效能。應用程式應檢查 Wi-Fi 和乙太網路連線。如果應用程式僅用於電視,您不需要檢查 3G/LTE 服務,就像處理行動應用程式一樣。