หน้าจอทีวีมีข้อควรพิจารณาหลายประการที่อาจเป็นเรื่องใหม่สำหรับนักพัฒนาแอปเกมบนอุปกรณ์เคลื่อนที่ พื้นที่เหล่านี้ประกอบด้วยขนาดใหญ่ รูปแบบการควบคุม และข้อเท็จจริงที่ว่าผู้เล่นทั้งหมด กำลังดูพร้อมกัน
จอแสดงผล
สิ่งสำคัญ 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 อยู่คนละตำแหน่ง คุณดูรหัสคีย์สำหรับแป้นที่คาดหวังในตำแหน่งต่างๆ ได้โดยทำดังนี้
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) }
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"
ในไฟล์ Manifest ของแอป
<application>
เช่น
<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 เหมือนกับที่ทําสําหรับแอปบนอุปกรณ์เคลื่อนที่