สร้างเกมทีวี

หน้าจอทีวีมีข้อควรพิจารณาหลายประการที่อาจเป็นเรื่องใหม่สำหรับนักพัฒนาเกมในอุปกรณ์เคลื่อนที่ ซึ่งรวมถึงขนาดที่ใหญ่ รูปแบบการควบคุม และข้อเท็จจริงที่ว่าผู้เล่นทุกคนดูแผนที่พร้อมกัน

จอแสดงผล

สิ่งสำคัญ 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 อย่างที่คุณทำกับแอปบนอุปกรณ์เคลื่อนที่