หน้าจอทีวีมีข้อควรพิจารณาหลายประการที่นักพัฒนาเกมบนอุปกรณ์เคลื่อนที่อาจไม่เคยทราบมาก่อน ซึ่งรวมถึงขนาดที่ใหญ่ รูปแบบการควบคุม และข้อเท็จจริงที่ว่าผู้เล่นทุกคนดูแผนที่พร้อมกัน
จอแสดงผล
สิ่งสำคัญ 2 ประการที่ควรคำนึงถึงเมื่อพัฒนาเกมสำหรับหน้าจอทีวีคือการออกแบบเกมให้เหมาะกับการวางแนวนอนและการรองรับเวลาในการตอบสนองต่ำ
รองรับการแสดงผลในแนวนอน
ทีวีจะวางแนวนอนเสมอ คุณไม่สามารถหมุนและไม่มีการวางแนวตั้ง ออกแบบเกมบนทีวีให้แสดงในโหมดแนวนอนเสมอ
โหมดค่าความหน่วงต่ำอัตโนมัติ
จอแสดงผลบางรุ่นสามารถประมวลผลกราฟิกหลังการประมวลผลได้ กระบวนการหลังการประมวลผลนี้จะช่วยปรับปรุงคุณภาพกราฟิก แต่อาจเพิ่มเวลาในการตอบสนอง จอแสดงผลรุ่นใหม่ที่รองรับ 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
เป็น KeyEvent.KEYCODE_S
และ keyRight
เป็น KeyEvent.KEYCODE_D
ตามลำดับ ตอนนี้คุณสร้างตัวแฮนเดิลเหตุการณ์สําคัญสําหรับรหัสเหล่านี้และใช้งานลักษณะการทํางานที่คาดไว้ได้แล้ว
ไฟล์ Manifest
เกมควรระบุข้อมูลพิเศษบางอย่างในไฟล์ Manifest ของ Android
แสดงเกมบนหน้าจอหลัก
หน้าจอหลักของ Android TV จะแสดงเกมในแถวแยกต่างหากจากแอปทั่วไป
หากต้องการให้เกมปรากฏในรายการเกม ให้ตั้งค่าแอตทริบิวต์
android:isGame
เป็น "true"
ในแท็ก <application>
ของไฟล์ Manifest ของแอป เช่น
<application ... android:isGame="true" ... >
ประกาศการรองรับตัวควบคุมเกม
ผู้ใช้อุปกรณ์ทีวีอาจใช้หรือเปิดใช้งานตัวควบคุมเกมไม่ได้ คุณต้องใส่รายการต่อไปนี้ในไฟล์ Manifest ของแอปเพื่อแจ้งให้ผู้ใช้ทราบว่าเกมของคุณรองรับตัวควบคุมเกมอย่างถูกต้อง
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
หมายเหตุ: เมื่อระบุการรองรับ android:hardware:gamepad
อย่าตั้งค่าแอตทริบิวต์ android:required
เป็น "true"
ซึ่งในกรณีนี้ ผู้ใช้จะติดตั้งแอปของคุณในอุปกรณ์ทีวีไม่ได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับรายการไฟล์ Manifest ได้ที่ไฟล์ Manifest ของแอป
บริการเกมของ Google Play
หากเกมผสานรวมบริการเกมของ Google Play คุณควรคำนึงถึงข้อควรพิจารณาหลายประการเกี่ยวกับรางวัลพิเศษ การลงชื่อเข้าใช้ และการบันทึกเกม
ความสำเร็จ
เกมของคุณควรมีรางวัลพิเศษ (ที่จะได้รับ) อย่างน้อย 5 รายการ เฉพาะผู้ใช้ที่ควบคุมเกมเพลย์จากอุปกรณ์อินพุตที่รองรับเท่านั้นที่จะได้รับรางวัล ดูข้อมูลเพิ่มเติมเกี่ยวกับรางวัลพิเศษและวิธีใช้งานได้ที่รางวัลพิเศษใน Android
ลงชื่อเข้าใช้
เกมควรพยายามลงชื่อเข้าใช้ให้ผู้ใช้เมื่อเปิด หากผู้เล่นปฏิเสธการลงชื่อเข้าใช้หลายครั้งติดต่อกัน เกมควรหยุดถาม ดูข้อมูลเพิ่มเติมเกี่ยวกับการลงชื่อเข้าใช้ที่หัวข้อการใช้การลงชื่อเข้าใช้ใน Android
กำลังบันทึก
ใช้เกมที่บันทึกไว้ของบริการ Google Play เพื่อจัดเก็บบันทึกเกม เกมควรเชื่อมโยงข้อมูลบันทึกเกมกับบัญชี Google ที่เฉพาะเจาะจงเพื่อให้ระบุตัวตนได้โดยไม่ซ้ำกันแม้ในอุปกรณ์ต่างๆ ก็ตาม ไม่ว่าผู้เล่นจะใช้โทรศัพท์มือถือหรือทีวี เกมก็ควรดึงข้อมูลบันทึกเกมจากบัญชีผู้ใช้เดียวกันได้
นอกจากนี้ คุณควรระบุตัวเลือกใน UI ของเกมเพื่อให้ผู้เล่นลบข้อมูลที่จัดเก็บไว้ในระบบคลาวด์และที่จัดเก็บไว้ในเครื่องได้ คุณอาจใส่ตัวเลือกนี้ไว้ในหน้าจอ Settings
ของเกม ดูรายละเอียดเกี่ยวกับการใช้เกมที่บันทึกไว้โดยใช้ Play Services ได้ที่เกมที่บันทึกไว้ใน Android
ออก
มีองค์ประกอบ UI ที่ชัดเจนและสอดคล้องกันซึ่งช่วยให้ผู้ใช้ออกจากเกมได้อย่างราบรื่น คุณควรเข้าถึงองค์ประกอบนี้ได้โดยใช้ปุ่มบังคับทิศทาง ให้ใช้วิธีนี้แทนการกดปุ่มหน้าแรกเพื่อออก เนื่องจากวิธีนี้ไม่สอดคล้องกันและไม่เชื่อถือได้สำหรับรีโมตคอนโทรลแต่ละรุ่น
เว็บ
อย่าเปิดใช้การท่องเว็บในเกมสำหรับ Android TV Android TV ไม่รองรับเว็บเบราว์เซอร์
หมายเหตุ: คุณสามารถใช้คลาส WebView
เพื่อเข้าสู่ระบบบริการโซเชียลมีเดียได้
เครือข่าย
เกมมักต้องใช้แบนด์วิดท์มากขึ้นเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด และผู้ใช้จำนวนมากต้องการใช้อีเทอร์เน็ตมากกว่า Wi-Fi เพื่อให้ได้ประสิทธิภาพดังกล่าว แอปควรตรวจสอบทั้งการเชื่อมต่อ Wi-Fi และอีเทอร์เน็ต หากแอปของคุณมีไว้สำหรับทีวีเท่านั้น คุณไม่จําเป็นต้องตรวจสอบบริการ 3G/LTE เช่นเดียวกับแอปบนอุปกรณ์เคลื่อนที่