หน้าจอโทรทัศน์มีข้อควรพิจารณาหลายประการที่อาจเป็นเรื่องใหม่สำหรับนักพัฒนาเกมมือถือ ซึ่งรวมถึงขนาดที่ใหญ่ รูปแบบการควบคุม และข้อเท็จจริงที่ว่าผู้เล่นทุกคน กำลังดูพร้อมกัน
จอแสดงผล
สิ่งสำคัญ 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
และ keyRight
จะตั้งค่าเป็น KeyEvent.KEYCODE_S
และ 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 ได้ที่เกมที่บันทึกไว้ใน Android
ออก
จัดเตรียมองค์ประกอบ UI ที่สอดคล้องกันและชัดเจนซึ่งช่วยให้ผู้ใช้ออกจากเกมได้อย่างราบรื่น ผู้ใช้ควรเข้าถึง องค์ประกอบนี้ได้ด้วยปุ่มนำทางบน D-pad ให้ทำเช่นนี้แทนการใช้ปุ่มหน้าแรกเพื่อออก เนื่องจากปุ่มดังกล่าวไม่สอดคล้องและไม่น่าเชื่อถือในตัวควบคุมต่างๆ
เว็บ
อย่าเปิดใช้การท่องเว็บในเกมสำหรับ Android TV Android TV ไม่รองรับเว็บเบราว์เซอร์
หมายเหตุ: คุณใช้คลาส WebView
สำหรับการเข้าสู่ระบบบริการโซเชียลมีเดียได้
เครือข่าย
เกมมักต้องการแบนด์วิดท์ที่มากขึ้นเพื่อให้มีประสิทธิภาพสูงสุด และผู้ใช้จำนวนมากชอบใช้ อีเทอร์เน็ตมากกว่า Wi-Fi เพื่อให้ได้ประสิทธิภาพดังกล่าว แอปควรตรวจสอบทั้งการเชื่อมต่อ Wi-Fi และอีเทอร์เน็ต หากแอปของคุณใช้สำหรับทีวีเท่านั้น คุณไม่จำเป็นต้องตรวจสอบบริการ 3G/LTE เหมือนกับที่ทำสำหรับแอปบนอุปกรณ์เคลื่อนที่