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

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

จอแสดงผล

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