หน้าจอทีวีมีข้อควรพิจารณาหลายประการที่อาจเป็นเรื่องใหม่สำหรับนักพัฒนาเกมมือถือ ซึ่งรวมถึงขนาดที่ใหญ่ รูปแบบการควบคุม และความจริงที่ว่าผู้เล่นทุกคนกำลังดูหน้าจอพร้อมกัน
Display
สิ่งสำคัญ 2 อย่างที่ควรคำนึงถึงเมื่อพัฒนาเกมสำหรับหน้าจอทีวีคือการออกแบบเกมสำหรับการวางแนวแนวนอนและการรองรับเวลาในการตอบสนองต่ำ
รองรับการแสดงผลในแนวนอน
ทีวีจะแสดงผลในแนวนอนเสมอ คุณไม่สามารถหมุนทีวีได้ และไม่มีการวางแนวตั้ง ออกแบบเกมสำหรับทีวีให้แสดงผลในโหมดแนวนอนเสมอ
โหมดค่าความหน่วงต่ำอัตโนมัติ
จอแสดงผลบางรุ่นสามารถประมวลผลกราฟิกหลังการแสดงผลได้ การประมวลผลภายหลังนี้จะปรับปรุงคุณภาพกราฟิก แต่อาจเพิ่มเวลาในการตอบสนอง จอแสดงผลรุ่นใหม่ที่รองรับ HDMI 2.1 มีโหมดค่าความหน่วงต่ำอัตโนมัติ (ALLM) ซึ่งจะลดเวลาในการตอบสนองโดยการปิดการประมวลผลหลังการแสดงผลนี้ ดูรายละเอียดเพิ่มเติมเกี่ยวกับ ALLM ได้ที่ข้อกำหนด HDMI 2.1 จอแสดงผลอื่นๆ อาจรองรับโหมดเกมที่มีลักษณะการทำงานคล้ายกัน
ใน Android 11 ขึ้นไป หน้าต่างสามารถขอให้ใช้โหมดเวลาในการตอบสนองต่ำอัตโนมัติหรือโหมดเกมได้ (หากมี) โดยขอการประมวลผลหลังการถ่ายภาพน้อยที่สุด ซึ่งจะเป็นประโยชน์อย่างยิ่งสำหรับแอปพลิเคชันเกมและการประชุมทางวิดีโอ ซึ่งเวลาในการตอบสนองต่ำมีความสำคัญมากกว่าการมีกราฟิกที่ดีที่สุด
หากต้องการเปิดหรือปิดใช้การประมวลผลหลังการถ่ายภาพขั้นต่ำ ให้เรียกใช้ Window.setPreferMinimalPostProcessing() หรือตั้งค่าแอตทริบิวต์ preferMinimalPostProcessing ของหน้าต่างเป็น true จอแสดงผลบางรุ่นไม่รองรับการประมวลผลหลังการแสดงผลขั้นต่ำ หากต้องการทราบว่าจอแสดงผลหนึ่งๆ รองรับหรือไม่ ให้เรียกใช้เมธอด Display.isMinimalPostProcessingSupported()
อุปกรณ์อินพุต
ทีวีไม่มีอินเทอร์เฟซแบบสัมผัส ดังนั้นการควบคุมที่เหมาะสมจึงมีความสำคัญมากยิ่งขึ้น เพื่อให้ผู้เล่นรู้สึกว่าใช้งานง่ายและสนุก การจัดการคอนโทรลเลอร์ยังทำให้เกิดปัญหาอื่นๆ ที่ต้องให้ความสนใจ เช่น การติดตามคอนโทรลเลอร์หลายตัว และการจัดการการยกเลิกการเชื่อมต่ออย่างราบรื่น แอป TV ทั้งหมด รวมถึงเกม ควรจัดการคอนโทรลเลอร์อย่างสอดคล้องกัน อ่านข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตัวควบคุมทีวีได้ที่จัดการตัวควบคุมทีวี และข้อมูลเฉพาะเกี่ยวกับการใช้ตัวควบคุมทีวีสำหรับเกมได้ที่จัดการตัวควบคุมสำหรับเกม
รูปแบบแป้นพิมพ์
ใน 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 ตามลำดับ ตอนนี้คุณสามารถสร้างตัวแฮนเดิลเหตุการณ์สำคัญสำหรับคีย์โค้ดเหล่านี้และใช้ลักษณะการทำงานที่คาดไว้ได้แล้ว
ไฟล์ Manifest
มีบางสิ่งที่เกมควรระบุไว้ใน Android Manifest
แสดงเกมของคุณบนหน้าจอหลัก
หน้าจอหลักของ 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 เป็น "false" หากเกมเล่นด้วยรีโมตทีวีมาตรฐาน (D-pad) ได้ด้วย ตั้งค่า android:required เป็น "true" เฉพาะในกรณีที่ต้องใช้เกมคอนโทรลเลอร์เพื่อเล่นเกมเท่านั้น
การตั้งค่า android:required="true" จะแสดงป้าย "ต้องใช้เกมแพด" และคำเตือนก่อนการติดตั้งใน Google Play สำหรับ Android TV แทนที่จะบล็อกการติดตั้งในอุปกรณ์ทีวี
ดูข้อมูลเพิ่มเติมเกี่ยวกับรายการในไฟล์ Manifest ได้ที่ไฟล์ Manifest ของแอป
บริการเกมของ Google Play
หากเกมของคุณผสานรวมบริการเกมของ Google Play คุณควรคำนึงถึงข้อควรพิจารณาหลายประการเกี่ยวกับรางวัลพิเศษ การลงชื่อเข้าใช้ และเกมที่บันทึกไว้
ความสำเร็จ
เกมของคุณควรมีรางวัลพิเศษอย่างน้อย 5 รายการ (ที่ได้รับได้) เฉพาะผู้ใช้ที่ควบคุมเกมเพลย์จากอุปกรณ์อินพุตที่รองรับเท่านั้นที่ควรจะได้รับรางวัลพิเศษ ดูข้อมูลเพิ่มเติมเกี่ยวกับรางวัลพิเศษและวิธีใช้ได้ที่รางวัลพิเศษใน Android
ลงชื่อเข้าใช้
เกมของคุณควรพยายามลงชื่อเข้าใช้ให้ผู้ใช้เมื่อเปิดตัว หากผู้เล่นปฏิเสธการลงชื่อเข้าใช้หลายครั้งติดต่อกัน เกมควรหยุดถาม ดูข้อมูลเพิ่มเติมเกี่ยวกับการลงชื่อเข้าใช้ได้ที่การใช้การลงชื่อเข้าใช้ใน Android
กำลังบันทึก
ใช้เกมที่บันทึกไว้ของบริการ Google Play เพื่อจัดเก็บข้อมูลเกมที่บันทึกไว้ เกมควรผูกการบันทึกเกมไว้กับบัญชี Google ที่เฉพาะเจาะจง เพื่อให้ระบุตัวตนได้อย่างแน่ชัดแม้จะใช้อุปกรณ์ต่างกัน ไม่ว่าผู้เล่นจะใช้โทรศัพท์มือถือหรือทีวี เกมก็ควรดึงข้อมูลการบันทึกเกมจากบัญชีผู้ใช้เดียวกันได้
นอกจากนี้ คุณควรระบุตัวเลือกใน UI ของเกมเพื่ออนุญาตให้ผู้เล่นลบข้อมูลที่จัดเก็บไว้ในเครื่องและในระบบคลาวด์ คุณอาจใส่ตัวเลือกนี้ไว้ในหน้าจอSettingsของเกม ดูข้อมูลเฉพาะเกี่ยวกับการใช้เกมที่บันทึกไว้โดยใช้บริการ Google Play ได้ที่เกมที่บันทึกไว้ใน Android
ออก
จัดเตรียมองค์ประกอบ UI ที่สอดคล้องและชัดเจนซึ่งช่วยให้ผู้ใช้ออกจากเกมได้อย่างราบรื่น องค์ประกอบนี้ควรเข้าถึงได้ด้วยปุ่มไปยังส่วนต่างๆ ของ D-pad ให้ทำเช่นนี้แทนการใช้ปุ่มหน้าแรกเพื่อออกจากแอป เนื่องจากปุ่มดังกล่าวอาจทำงานไม่เหมือนกันหรือไม่น่าเชื่อถือในตัวควบคุมที่แตกต่างกัน
เว็บ
อย่าเปิดใช้การท่องเว็บในเกมสำหรับ Android TV Android TV ไม่รองรับเว็บเบราว์เซอร์
หมายเหตุ: คุณสามารถใช้คลาส WebView สำหรับการเข้าสู่ระบบบริการโซเชียลมีเดียได้
เครือข่าย
เกมมักต้องการแบนด์วิดท์ที่มากขึ้นเพื่อให้มีประสิทธิภาพสูงสุด และผู้ใช้หลายคนชอบใช้อีเทอร์เน็ตมากกว่า Wi-Fi เพื่อให้ได้ประสิทธิภาพดังกล่าว แอปควรตรวจสอบทั้งการเชื่อมต่อ Wi-Fi และอีเทอร์เน็ต หากแอปของคุณมีไว้สำหรับทีวีเท่านั้น คุณไม่จำเป็นต้องตรวจสอบบริการ 3G/LTE เหมือนกับที่ทำสำหรับแอปบนอุปกรณ์เคลื่อนที่