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