Hỗ trợ phương thức nhập

Mặc dù nhiều thiết bị ChromeOS có màn hình cảm ứng, nhưng đối với trò chơi, trải nghiệm tương tác tốt nhất trên các thiết bị màn hình lớn này thường được cung cấp thông qua chuột, bàn phím và tay điều khiển trò chơi. Thế giới trò chơi di động thường tập trung vào thao tác chạm và bạn cần cân nhắc cách mang lại trải nghiệm tốt nhất cho người dùng không sử dụng thao tác chạm.

Bắt đầu bằng cách xem các phương pháp hay nhất để thêm tính năng hỗ trợ bàn phím, chuột và tay điều khiển trò chơi. Bạn sẽ muốn đặc biệt chú ý đến trường hợp người dùng giữ phím hoặc có thể nhấn nhiều phím.

Các thao tác dựa trên cảm ứng phù hợp với Chromebook có màn hình cảm ứng, nhưng bạn cũng cần bổ sung các chế độ điều khiển thực tế chu đáo để mang lại trải nghiệm tuyệt vời. Ví dụ: chuột là thiết bị đầu vào lý tưởng để điều chỉnh chế độ xem hoặc nhắm mục tiêu, nhưng không nên bắt buộc người dùng phải thực hiện các thao tác. Nếu một trò chơi di động có một trình đơn trên màn hình cho phép người dùng sử dụng đuốc, kiếm hoặc khiên bằng cách nhấn nút bằng ngón tay cái, thì việc yêu cầu họ nhấp vào các nút này bằng chuột sẽ mang lại trải nghiệm không tốt. Thay vào đó, bạn nên chỉ định các phím trên bàn phím để kích hoạt từng thao tác bằng cách ghi đè onKeyUp hoặc onKeyDown. Hãy xem trang khả năng tương thích với thiết bị đầu vào để biết thông tin chi tiết và mã.

Chế độ ghi nhận thao tác bằng chuột

Trò chơi góc nhìn thứ nhất sẽ trông đẹp nhất trên máy tính khi triển khai tính năng bắt chuột. Thao tác này sẽ ẩn con trỏ chuột và cho phép người dùng di chuyển điểm nhìn, nhắm mục tiêu, lái xe, v.v. bằng cách sử dụng chuột. Dưới đây là bản minh hoạ cơ bản về tính năng ghi lại thao tác bằng chuột, ghi lại vị trí con trỏ và trạng thái nút sau khi người dùng nhấp vào một khung hiển thị văn bản có tên là text_clickme. Hãy xem tài liệu về tính năng bắt con trỏ trên Android để biết thêm thông tin.

class MainActivity : AppCompatActivity() {
    var mouse_x: Float = 0f
    var mouse_y: Float = 0f
    var mouse_left_pressed = false
    var mouse_center_pressed = false
    var mouse_right_pressed = false
    var mouse_scrolling = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        text_clickme.setOnClickListener {
            text_clickme.requestPointerCapture()
        }

        text_clickme.setOnCapturedPointerListener { view, motionEvent ->
            // Get the coordinates required by your app
            mouse_x = motionEvent.x
            mouse_y = motionEvent.y

            when (motionEvent.action) {
                ACTION_DOWN -> {
                    when (motionEvent.buttonState) {
                        BUTTON_PRIMARY -> mouse_left_pressed = true
                        BUTTON_SECONDARY -> mouse_right_pressed = true
                        BUTTON_TERTIARY -> mouse_center_pressed = true
                    }
                    mouse_scrolling = false
                }

                ACTION_CANCEL,
                ACTION_UP -> {
                    when (motionEvent.actionButton) {
                        BUTTON_PRIMARY -> mouse_left_pressed = false
                        BUTTON_SECONDARY -> mouse_right_pressed = false
                        BUTTON_TERTIARY -> mouse_center_pressed = false
                        0 -> {
                            mouse_left_pressed = false
                            mouse_right_pressed = false
                            mouse_center_pressed = false
                        }
                    }
                    mouse_scrolling = false
                }
                ACTION_SCROLL -> {
                    mouse_scrolling = true
                }
                else -> {
                    mouse_scrolling = false
                }
            }

            // Indicate event was consumed
            true
        }
    }

    // Release pointer capture when escape pressed
    override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
        if (keyCode == KEYCODE_ESCAPE) {
            text_clickme.releasePointerCapture()
            return true;
        }
        return super.onKeyUp(keyCode, event)
    }
}

Chat (Trò chuyện)

Các tính năng trò chuyện có thể là một thành phần quan trọng trong trò chơi nhiều người chơi. Hãy dành chút thời gian để suy nghĩ về cách người dùng sẽ tương tác với tính năng trò chuyện của trò chơi trong khi chơi. Cụ thể, nếu đang chơi bằng bàn phím, họ không cần dùng chuột hoặc màn hình cảm ứng để truy cập vào tính năng trò chuyện hoặc gửi tin nhắn.

Một mẫu có thể là có một phím trên bàn phím lấy tiêu điểm hộp trò chuyện và xử lý phím enter để gửi tin nhắn.

override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
  return when(keyCode) {
    KeyEvent.KEYCODE_C -> {
      edittext_chatbox.requestFocus()
      true
    }
    KeyEvent.KEYCODE_ENTER -> {
      submitChatMessage()
      true
    }
    else -> super.onKeyUp(keyCode, event)
  }
}

Xem tài liệu về bàn phím trên trang khả năng tương thích với thiết bị đầu vào của Android.

Hỗ trợ bút cảm ứng

Các ứng dụng vẽ và trò chơi dựa trên thao tác vuốt có thể tận dụng phương thức nhập bằng bút cảm ứng trên thiết bị ChromeOS. Hãy xem trang thông tin đầu vào bằng bút cảm ứng để biết thêm thông tin.

Tay điều khiển trò chơi

Chromebook hỗ trợ tối đa 4 tay điều khiển trò chơi. Nhà phát triển nên sử dụng API Tay điều khiển trò chơi tiêu chuẩn của Android để hỗ trợ các API này.

Các nút được liên kết tới các giá trị chung theo một mối liên kết chung. Rất tiếc là không phải tất cả các nhà sản xuất tay điều khiển trò chơi đều tuân theo cùng một quy ước liên kết. Việc cho phép người dùng chọn trong số nhiều cách sắp xếp tay điều khiển phổ biến có thể mang lại trải nghiệm tốt hơn nhiều.