Tạo trò chơi dành cho TV

Màn hình TV đưa ra một số điểm cần cân nhắc mà có thể bạn mới thấy đối với trò chơi dành cho thiết bị di động nhà phát triển. Những khía cạnh này bao gồm quy mô lớn, cơ chế điều khiển và thực tế là tất cả người chơi đang xem quảng cáo đó cùng một lúc.

Màn hình

Hai điều chính cần lưu ý khi phát triển trò chơi cho màn hình TV là thiết kế trò chơi của bạn theo hướng ngang và hỗ trợ độ trễ thấp.

Hỗ trợ chế độ hiển thị ngang

TV luôn lệch sang một bên: Bạn không thể xoay TV và TV không có hướng dọc. Luôn luôn thiết kế trò chơi trên TV của bạn sẽ xuất hiện ở chế độ ngang.

Chế độ độ trễ thấp tự động

Một số màn hình nhất định có thể thực hiện xử lý hậu kỳ đồ hoạ. Hậu xử lý này cải thiện đồ hoạ nhưng có thể làm tăng độ trễ. Các màn hình mới hơn hỗ trợ HDMI 2.1 có chế độ tự động thấp chế độ độ trễ (ALLM) để giảm thiểu độ trễ bằng cách tắt quá trình xử lý hậu kỳ này. Cho để biết thêm chi tiết về ALLM, hãy tham khảo Quy cách của HDMI 2.1. Thông tin khác màn hình có thể hỗ trợ chế độ trò chơi có hành vi tương tự.

Trên Android 11 trở lên, một cửa sổ có thể yêu cầu chế độ hoặc trò chơi tự động có độ trễ thấp sử dụng chế độ xử lý (nếu có) bằng cách yêu cầu xử lý hậu kỳ ở mức tối thiểu. Điều này đặc biệt hữu ích cho các ứng dụng trò chơi và hội nghị truyền hình, trong đó độ trễ thấp quan trọng hơn để có hình ảnh đồ hoạ đẹp nhất có thể.

Để bật hoặc tắt chế độ xử lý hậu kỳ tối thiểu, hãy gọi Window.setPreferMinimalPostProcessing(), hoặc đặt preferMinimalPostProcessing cho true. Không phải màn hình nào cũng hỗ trợ xử lý hậu kỳ tối thiểu; để tìm hiểu xem màn hình cụ thể nào có hỗ trợ, hãy gọi phương thức Display.isMinimalPostProcessingSupported().

Thiết bị đầu vào

TV không có giao diện cảm ứng, vì vậy, điều quan trọng hơn nữa là bạn phải điều khiển được đảm bảo người chơi thấy trực quan và thú vị khi sử dụng. Xử lý các bộ điều khiển cũng đưa ra một số vấn đề khác cần chú ý, chẳng hạn như theo dõi nhiều bộ điều khiển và việc xử lý sẽ ngắt kết nối một cách linh hoạt. Tất cả ứng dụng truyền hình, bao gồm cả trò chơi, đều nên xử lý một cách nhất quán. Đọc Quản lý TV bộ điều khiển để biết thêm thông tin về cách sử dụng bộ điều khiển TV và Xử lý tay điều khiển trò chơi cho một số trò chơi cụ thể thông tin về cách sử dụng tay điều khiển TV cho trò chơi.

Bố cục bàn phím

Trong Android 13 (API cấp 33) trở lên, bạn có thể xác định bố cục bàn phím bằng cách sử dụng getKeyCodeForKeyLocation(). Ví dụ: trò chơi của bạn hỗ trợ chuyển động bằng các phím WASD nhưng tính năng này có thể không hoạt động chính xác trên bàn phím AZERTY có các phím A và W ở những vị trí khác nhau. Bạn có thể lấy mã phím cho các khoá bạn muốn tại các vị trí nhất định:

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);
}

Trong ví dụ này, với bàn phím AZERTY, keyUp được đặt thành KeyEvent.KEYCODE_Z, keyLeft được đặt thành KeyEvent.KEYCODE_Q, trong khi keyDownkeyRight được đặt thành KeyEvent.KEYCODE_SKeyEvent.KEYCODE_D tương ứng. Giờ đây, bạn có thể tạo trình xử lý sự kiện chính cho mã phím và triển khai hành vi dự kiến.

Tệp kê khai

Có một số điều đặc biệt mà trò chơi nên đưa vào trong tệp kê khai Android.

Hiển thị trò chơi trên màn hình chính

Màn hình chính của Android TV hiển thị các trò chơi trong một hàng riêng biệt với các ứng dụng thông thường. Để trò chơi của bạn xuất hiện trong danh sách trò chơi, hãy đặt Thuộc tính android:isGame cho "true" trong tệp kê khai ứng dụng <application> . Ví dụ:

<application
    ...
    android:isGame="true"
    ...
>

Khai báo tính năng hỗ trợ tay điều khiển trò chơi

Người dùng thiết bị TV có thể không sử dụng được hoặc không sử dụng được tay điều khiển trò chơi. Để thực hiện đúng thông báo cho người dùng rằng trò chơi của bạn hỗ trợ tay điều khiển trò chơi, bạn phải thêm mục nhập sau vào tệp kê khai ứng dụng của bạn:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

Lưu ý: Khi chỉ định khả năng hỗ trợ android:hardware:gamepad, đừng đặt giá trị android:required cho "true". Nếu bạn làm như vậy, người dùng sẽ không thể cài đặt ứng dụng của bạn trên thiết bị TV.

Để biết thêm thông tin về các mục nhập tệp kê khai, hãy xem Tệp kê khai ứng dụng.

Dịch vụ trò chơi của Google Play

Nếu trò chơi của bạn tích hợp dịch vụ trò chơi của Google Play, bạn nên lưu ý một số các cân nhắc liên quan đến thành tích, đăng nhập và lưu trò chơi.

Thành tích

Trò chơi của bạn phải có ít nhất 5 thành tích (có thể kiếm được). Chỉ một người dùng đang điều khiển việc chơi trò chơi từ một thiết bị đầu vào được hỗ trợ sẽ có thể đạt được thành tích. Để biết thêm thông tin về thành tích và cách triển khai, hãy xem Thành tích trong Android.

Đăng nhập

Trò chơi của bạn nên cố gắng đăng nhập người dùng khi khởi chạy. Nếu người chơi từ chối đăng nhập nhiều lần lượt chơi liên tiếp, trò chơi của bạn sẽ ngừng hỏi. Tìm hiểu thêm về quy trình đăng nhập tại bài viết Triển khai quy trình đăng nhập trên Android.

Đang lưu

Sử dụng Trò chơi đã lưu trong Dịch vụ Google Play để lưu trữ trò chơi bạn lưu. Trò chơi của bạn phải liên kết trò chơi đã lưu vào một Tài khoản Google cụ thể để được có thể nhận dạng chính xác ngay cả trên các thiết bị: Cho dù người chơi đang sử dụng điện thoại di động hay TV, trò chơi đó có thể lấy thông tin lưu trong trò chơi từ cùng một tài khoản người dùng.

Bạn cũng nên cung cấp một tuỳ chọn trong giao diện người dùng của trò chơi để cho phép người chơi xoá trên thiết bị và dữ liệu được lưu trữ trên đám mây. Bạn có thể đặt tuỳ chọn này vào màn hình Settings của trò chơi. Cho thông tin cụ thể về cách triển khai trò chơi đã lưu bằng Dịch vụ Play, vui lòng xem bài viết Trò chơi đã lưu trong Android.

Thoát

Cung cấp thành phần giao diện người dùng nhất quán và rõ ràng giúp người dùng thoát khỏi trò chơi một cách dễ dàng. Chiến dịch này phải truy cập được bằng các nút điều hướng trên D-pad. Hãy làm điều này thay vì dựa vào Nút màn hình chính để thoát, vì nút này không nhất quán và cũng không đáng tin cậy giữa các bộ điều khiển.

Web

Không bật tính năng duyệt web trong các trò chơi dành cho Android TV. Android TV không hỗ trợ trình duyệt web.

Lưu ý: Bạn có thể dùng lớp WebView để đăng nhập để dịch vụ mạng xã hội.

Mạng

Các trò chơi thường cần băng thông lớn hơn để mang lại hiệu suất tối ưu, và nhiều người dùng thích Ethernet sang Wi-Fi để cung cấp hiệu suất đó. Ứng dụng của bạn phải kiểm tra cả Wi-Fi và Ethernet kết nối. Nếu ứng dụng của bạn chỉ dành cho TV, thì bạn không cần kiểm tra dịch vụ 3G/LTE như bình thường cho ứng dụng dành cho thiết bị di động.