![Máy tính để bàn có bàn phím và chuột. Trò chơi đang chạy trên màn hình, hiển thị các phương thức nhập bằng màn hình cảm ứng để điều khiển hướng và chuột.](https://developer.android.google.cn/static/images/games/multiplatform/game_with_touchscreen_input.png?authuser=1&hl=vi)
Thiết bị Android có nhiều hình dạng và kích thước. Mở rộng phạm vi tiếp cận của trò chơi bằng cách cho phép người chơi chơi ở bất cứ nơi nào họ muốn, cho dù đó là điện thoại, máy tính bảng, máy tính, TV, ô tô hay tai nghe XR. Tại đây, bạn sẽ tìm hiểu:
- Cách tính năng hỗ trợ chuột và bàn phím có thể mang trò chơi của bạn đến với người chơi trên máy tính và ChromeOS, cũng như cải thiện khả năng chơi trên các thiết bị màn hình lớn.
- Cách đáp ứng nhu cầu của những người chơi tận tâm nhất ngay tại nơi họ đang chơi bằng tính năng tích hợp tay điều khiển trò chơi.
- Cách thêm tính năng hỗ trợ bút cảm ứng để chơi trò chơi chính xác và nhạy khi di chuyển.
- Cách hỗ trợ tay điều khiển TV và khai thác màn hình lớn nhất mà người chơi sở hữu: TV.
- Những điểm cần cân nhắc về thiết kế liên quan đến thời điểm chuyển đổi giữa các phương thức nhập.
- Những việc mà trò chơi đa hệ số hình dạng làm để hỗ trợ lựa chọn ưu tiên về phương thức nhập của người chơi.
- Và nhiều tính năng khác.
Khả năng tương thích tự động
Android có khả năng tương thích tự động không chạm khi có thể, ví dụ:
dispatchTouchEvent
/onTouchEvent
phản hồi bằng các sự kiện chuyển động ngay cả khi nhấp hoặc nhập bằng bút cảm ứng. Điều này có nghĩa là nếu bạn không đánh dấu vào loại công cụ, thì logic xử lý thao tác chạm của bạn sẽ hoạt động với chuột và bút cảm ứng.- Một số sự kiện tay điều khiển trò chơi và tay điều khiển TV chưa được xử lý sẽ được phát lại dưới dạng sự kiện bàn phím.
Các hệ số hình dạng như máy tính (chẳng hạn như Play Games và ChromeOS) mặc định tạo ra các thao tác chạm từ các lượt nhấp chuột. Vì có thể không có màn hình cảm ứng để dự phòng, nên phương thức này cung cấp mức độ tương thích cơ bản.
Các sự kiện chuột và bút cảm ứng được gửi đến lệnh gọi lại thao tác chạm.
Các sự kiện tay điều khiển trò chơi và tay điều khiển TV chưa được xử lý sẽ được phát lại dưới dạng sự kiện bàn phím.
Theo mặc định, các hệ số hình dạng giống máy tính như Play Games và ChromeOS sẽ tạo sự kiện chạm thay vì sự kiện chuột để tối đa hoá khả năng tương thích với các trò chơi cần nhập bằng màn hình cảm ứng.
Để mang lại trải nghiệm tốt nhất cho người dùng, hãy triển khai tính năng hỗ trợ trực tiếp cho phương thức nhập không chạm thay vì dựa vào khả năng tương thích tự động.
Hỗ trợ mọi kiểu dáng
Android chạy trên danh sách thiết bị ngày càng tăng. Cho dù người chơi mở điện thoại thành máy tính bảng màn hình lớn, bật TV chạy Android, mở trò chơi Android trên Chromebook hay khởi động một trò chơi nhanh trong ô tô khi chờ sạc, bạn đều có thể thu hút người chơi ở nhiều nơi và trên nhiều màn hình hơn bao giờ hết. Bạn chỉ cần đảm bảo rằng trò chơi của mình có thể chơi được ở nơi người chơi của bạn sinh sống:
Hệ số dạng | Dữ liệu đầu vào mặc định thông thường | Màn hình cảm ứng | Chuột và bàn phím | Tay điều khiển trò chơi | Bút cảm ứng1 | Bàn phím di chuyển 5 chiều |
---|---|---|---|---|---|---|
Điện thoại | Màn hình cảm ứng | Có | Có | Có | Có | Có |
Màn hình lớn | Màn hình cảm ứng | Có | Có | Có | Có | Có |
PC2 | Chuột và bàn phím | Không | Có | Có | Không | Không |
ChromeOS3 | Bàn di chuột, chuột và bàn phím | Thỉnh thoảng | Có | Có | Có | Có |
TV | Bàn phím di chuyển 5 chiều | Không | Có | Có | Không | Có |
Cars4 (Automotive OS) |
Màn hình cảm ứng | Có | Có | Có | Không | Có |
Watch5 | Màn hình cảm ứng | Có | Không | Không | Không | Không |
Bảng này nhằm giúp bạn ưu tiên hỗ trợ cho các cơ chế nhập mới bằng cách làm nổi bật phương thức nhập dự kiến trên từng kiểu dáng. Xin lưu ý rằng bạn nên:
- Tránh sử dụng một cơ chế nhập mặc định. Việc này có thể vô tình hạn chế phạm vi tiếp cận của các nỗ lực không dùng thao tác chạm. Ví dụ: mặc dù hầu hết người chơi muốn chơi trò chơi trên ChromeOS bằng chuột và bàn phím, nhưng một số người chơi vẫn có thể muốn hỗ trợ màn hình cảm ứng tuỳ thuộc vào hồ sơ thiết bị của họ.
- Tránh khoá cơ chế nhập vào các kiểu dáng. Android tương thích với nhiều thiết bị ngoại vi và thiết bị lai ngày càng phổ biến. Việc xoá tính năng hỗ trợ bàn phím khỏi bản dựng dành cho điện thoại có thể khiến trò chơi của bạn không hoàn chỉnh nếu người chơi có máy tính bảng đi kèm với bàn phím có thể tháo rời.
Dữ liệu nhập từ chuột
Màn hình lớn nhất và sống động nhất của người chơi có thể đang chạy Android, cho dù đó là máy tính xách tay ChromeOS, máy tính bảng Android hay máy tính. Người chơi thường muốn chơi bằng chuột trên những thiết bị này và việc thêm tính năng hỗ trợ có thể giúp tăng mức độ tương tác của người chơi. Android hỗ trợ các tính năng thông thường phổ biến trên các hệ điều hành máy tính, bao gồm:
- Hỗ trợ thao tác nhấp chuột trái, phải và giữa cũng như các nút bổ sung như quay lại và tiến
- Phát hiện con lăn chuột
- Báo cáo chuyển động của chuột theo phương thức tuyệt đối hoặc tương đối (còn gọi là ghi lại con trỏ)
- Khả năng xác định biểu tượng con trỏ tuỳ chỉnh
Có hướng dẫn dành riêng cho hệ số hình dạng cho:
Nhập bằng bàn di chuột
Tính năng chụp dữ liệu đầu vào bằng bàn di chuột trên Android có đôi chút khác biệt so với tính năng hỗ trợ chuột. Khi gọi requestPointerCapture()
, bạn đang yêu cầu quyền truy cập thô vào các thao tác chạm trên bàn di chuột. Điều này có nghĩa là bạn nhận được các sự kiện cho mỗi lần chạm giống như cách bạn nhận được các sự kiện cảm ứng đa điểm từ màn hình cảm ứng, ngoại trừ toạ độ nằm trong không gian toạ độ của bàn di chuột thay vì toạ độ của màn hình. Tính năng lọc lòng bàn tay và phát hiện cử chỉ trên bàn di chuột tích hợp sẵn của Android sẽ bị tắt ở chế độ này. Ví dụ: nếu người dùng đang di chuyển một ngón tay trên bàn di chuột trong khi vẫn đặt ngón tay cái ở góc dưới bên trái để sẵn sàng nhấp, thì trò chơi của bạn sẽ quyết định sử dụng chuyển động của ngón tay nào trong logic của bạn (ví dụ: để di chuyển máy ảnh).
Điều này có nghĩa là bạn có thể sử dụng tay điều khiển có bàn di chuột tích hợp giống như màn hình cảm ứng để nhập bằng cử chỉ mạnh mẽ.
Để xác định xem người chơi đang sử dụng chuột hay bàn di chuột trong quá trình chụp con trỏ, hãy kiểm tra giá trị nguồn từ InputDevice#getSources()
hoặc MotionEvent#getSource()
cho InputDevice.SOURCE_TOUCHPAD
.
Nhập qua b.phím
Hỗ trợ bàn phím gần như phổ biến trên tất cả thiết bị Android. Tuỳ thuộc vào loại trò chơi mà bạn phát triển, việc thêm tính năng nhận biết bàn phím vào trò chơi sẽ mang lại nhiều lợi ích, từ việc tăng cơ sở người chơi bằng cách giúp trò chơi dễ tiếp cận hơn cho đến việc giúp trò chơi trở nên sống động và trực quan hơn.
Sau đây là một số cách phổ biến để cải thiện trò chơi bằng tính năng hỗ trợ bàn phím:
- Cơ chế cảm ứng đa điểm phải được liên kết với bàn phím cho các thiết bị không cảm ứng. Các trò chơi yêu cầu hai hoặc nhiều thao tác chạm đồng thời, chẳng hạn như di chuyển và nhảy, sẽ được hưởng lợi từ việc ánh xạ các thao tác này thành thao tác nhấn bàn phím để cải thiện khả năng chơi trên màn hình lớn và màn hình không cảm ứng.
- Cho phép điều hướng trình đơn bằng bàn phím. Việc thêm thao tác điều hướng bằng nút, chẳng hạn như các phím mũi tên và Enter, vào trình đơn và các thành phần chơi trò chơi tĩnh cho phép chơi trò chơi trên TV và cải thiện khả năng hỗ trợ tiếp cận trên mọi kiểu dáng.
- Thêm phím tắt cho các thao tác trên màn hình. Liên kết mọi thứ mà người chơi có thể chạm vào trên màn hình với một thao tác trên bàn phím. Tính năng truy cập nhanh vào các thao tác như chọn đơn vị trong trò chơi chiến lược hoặc kích hoạt các ô trong kho đồ trong trò chơi hành động giúp người chơi đắm chìm vào trò chơi của bạn.
Hãy nhớ rằng mặc dù bàn phím QWERTY khá phổ biến, nhưng có nhiều bố cục phổ biến khác nhau và một số ký tự chỉ cần nhấn một phím trong một bố cục có thể là một tổ hợp phím trong một bố cục khác.
Nếu trò chơi của bạn sử dụng vị trí tương đối của các phím để thực hiện hành động, chẳng hạn như sử dụng W, A, S và D như các phím mũi tên để di chuyển, hãy sử dụng InputDevice.getKeyCodeforKeyLocation()
để liên kết vị trí của phím QWERTY với mã phím trong KeyEvent.getKeyCode()
. Nếu bố cục của trình phát thay đổi, onInputDeviceChanged()
sẽ được gọi.
Khi thêm mục nhập văn bản vào trò chơi, TextInput trong GameActivity sẽ cung cấp một cơ chế để xử lý đáng tin cậy dữ liệu đầu vào IME, dấu phụ hoặc các biến thể khác theo khu vực cụ thể trong bố cục, trong khi vẫn sử dụng công cụ kết xuất văn bản trong trò chơi. Điều này giúp tránh được nhiều cạm bẫy khi xử lý trực tiếp hoạt động nhập bằng bàn phím hoặc sử dụng tiện ích EditText
ngoài màn hình.
Nhập bằng tay điều khiển trò chơi
![Hình ảnh một tay điều khiển trò chơi thông thường. Tay điều khiển này có một bàn phím di chuyển, 4 nút trên mặt được gắn nhãn a, b, x và y, 2 cần điều khiển analog và 4 nút kích hoạt. Có các con số trên hình ảnh nhưng không được tham chiếu trong trang này.](https://developer.android.google.cn/static/images/training/game-controller-profiles.png?authuser=1&hl=vi)
Tay điều khiển trò chơi được hỗ trợ chính thức trên Android, bao gồm cả các sự kiện kết nối và ngắt kết nối, hỗ trợ xúc giác, hỗ trợ đầu vào nâng cao bao gồm cả con quay hồi chuyển và hỗ trợ đầu ra như màu sáng (nếu có).
Nhà phát triển ứng dụng có thể nghe dữ liệu đầu vào của tay điều khiển trò chơi thông qua lệnh gọi lại View
hoặc Activity
, nhưng nhà phát triển trò chơi nên sử dụng Thư viện tay điều khiển trò chơi để:
- Được viết bằng C++ để tạo điều kiện tích hợp vào công cụ phát triển trò chơi của riêng bạn
- Tập trung tất cả tính năng của tay điều khiển trò chơi vào một API
- Phân biệt các biểu tượng trên các nút mặt của tay điều khiển để nhãn của trò chơi có thể khớp với tay điều khiển của người chơi
- Hợp nhất tính năng báo cáo sự kiện tay điều khiển trong trường hợp các nút là đầu vào tương tự trên một số tay điều khiển nhưng là đầu vào nhị phân trên các tay điều khiển khác
- Cung cấp khả năng tương thích chuyển tiếp có giới hạn trên các thiết bị Android cũ cho tay điều khiển mới
Phương thức nhập bằng bút cảm ứng
![Hình ảnh hiển thị một ứng dụng vẽ. Các bút vẽ đang mở cho thấy các hình dạng có thể vẽ bằng bút cảm ứng.](https://developer.android.google.cn/static/develop/ui/compose/images/touchinput/stylus/hero.png?authuser=1&hl=vi)
Android có tính năng hỗ trợ bút cảm ứng nâng cao trên hầu hết các thiết bị, bao gồm cả tính năng phát hiện áp lực, hướng, độ nghiêng, khoảng cách di và tì tay. Các sự kiện bút cảm ứng được gửi đến lệnh gọi lại chạm để giúp tương thích, nhưng điều quan trọng là bạn phải kiểm thử bằng thiết bị bút cảm ứng trong trường hợp logic công cụ lọc ra các sự kiện này. Việc tích hợp đầy đủ sẽ mang lại lợi ích cho các trò chơi có mục tiêu chạm nhỏ hoặc trò chơi có tính năng vẽ hình dạng tự do một cách tự nhiên.
Khi quá trình kết xuất bị trễ so với chuyển động của bút cảm ứng, độ trễ sẽ rõ ràng hơn so với khi bị ngón tay chặn hoặc bị ngắt kết nối với màn hình như với bàn phím, chuột hoặc tay điều khiển trò chơi. Vì lý do này, Android cung cấp quy trình có độ trễ thấp để kết xuất các nét vẽ với độ trễ chỉ 4 mili giây từ chuyển động của bút đến khi hiển thị trên màn hình. Có 3 cách để trò chơi của bạn có thể tận dụng khả năng này, giúp trò chơi của bạn cảm thấy được kết nối trực tiếp với thế giới thực:
- Thư viện Jetpack Ink cung cấp một bộ công cụ tiện lợi để thêm tính năng kết xuất nét vẽ thích ứng vào bất kỳ dự án Android nào.
- Đối với những trò chơi không thể hoặc không muốn dựa vào thành phần Kotlin để kết xuất nét vẽ, bạn có thể sử dụng mã nguồn C++ đầy đủ. Điều này cho phép nhà phát triển tích hợp những gì họ cần trực tiếp vào công nghệ của mình.
- Đối với các trò chơi yêu cầu tích hợp tuỳ chỉnh đầy đủ, bạn có thể thực thi logic kết xuất tuỳ chỉnh ngay trên vùng đệm trước để tối đa hoá cả khả năng phản hồi và khả năng kiểm soát.
Bộ điều khiển TV
![Hình ảnh của tay điều khiển TV dành cho Android. Các nút được gọi là D-pad, nút chọn, nút micrô hoặc nút trợ lý, nút quay lại và nút màn hình chính.](https://developer.android.google.cn/static/training/tv/images/tv-nav-controller.png?authuser=1&hl=vi)
Thiết bị Android TV đi kèm với một điều khiển từ xa có D-pad 5 chiều bao gồm 4 hướng chính và nút OK. Theo mặc định, các ứng dụng sử dụng hệ thống tiện ích tích hợp của Android sẽ hỗ trợ các tiện ích này, nhưng nhà phát triển phải kiểm thử các tiện ích tuỳ chỉnh của trò chơi để duy trì khả năng tương thích trên các thiết bị TV.
Hãy xem tài liệu về Android TV để biết thêm thông tin.
Các yếu tố cần cân nhắc khác
Để mang đến trải nghiệm tốt nhất cho người chơi, hãy thiết kế nhiều phương thức nhập và chuyển đổi linh hoạt giữa các phương thức đó. Nhờ đó, người chơi có thể nhanh chóng chuyển đổi giữa các phương thức nhập khác nhau tuỳ thuộc vào chế độ trò chơi mà họ đang chơi, hoặc trò chơi có thể dễ dàng chuyển đổi giữa các cấu hình khác nhau của một thiết bị chạy Android.
Do đó, hãy lưu ý rằng:
- Bạn nên kiểm tra sự hiện diện của một loại dữ liệu đầu vào thay vì lọc theo kiểu dáng thiết bị. Ví dụ: nếu bạn chỉ bật tính năng hỗ trợ chuột và bàn phím trên ChromeOS, thì người chơi trên máy tính bảng có bàn phím có thể tháo rời sẽ không được hưởng lợi từ nỗ lực của bạn.
- Có một số yếu tố cần cân nhắc bên ngoài kiểu dáng thiết bị ảnh hưởng đến hình thức nhập dữ liệu tốt nhất. Ví dụ: nhu cầu hỗ trợ tiếp cận của người chơi có thể khiến chuột hoặc màn hình cảm ứng khó sử dụng hoặc gây đau đớn, nhưng tay điều khiển hoặc bàn phím lại là lựa chọn lý tưởng.
- Có được hỗ trợ còn hơn không có hỗ trợ. Tốt nhất là bạn nên phản hồi ngay các thay đổi về phương thức nhập, nhưng người chơi sẽ cảm ơn bạn nếu bạn hỗ trợ họ một chút, miễn là họ có thể sử dụng tính năng hỗ trợ đó.
- Dữ liệu đầu vào tốt nhất có thể thay đổi giữa các lần chạy trò chơi. Ví dụ: bạn nên dùng màn hình cảm ứng khi chơi trò chơi khi di chuyển, tay điều khiển trò chơi khi cắm điện thoại vào TV, chuột và bàn phím khi ngồi ở bàn.
Cách phản hồi hoạt động đầu vào của người dùng
Các trò chơi di động thông thường hỗ trợ một người chơi trên mỗi thiết bị. Để có kết quả tốt nhất, trò chơi sẽ phản hồi tất cả dữ liệu đầu vào có thể và thay đổi giao diện người dùng dựa trên nội dung mà người chơi đang sử dụng. Bằng cách này, một phiên bản trò chơi sẽ tự động hoạt động trên tất cả các kiểu dáng thiết bị, và người chơi thậm chí có thể kết hợp các phương thức nhập để phù hợp với nhu cầu của họ.
Thường thì nhà phát triển muốn có một phương thức nhập mặc định có độ trễ tích hợp trước khi chuyển đổi giao diện người dùng. Điều này có nghĩa là gì?
- Vì hầu hết người chơi chơi trên màn hình cảm ứng, nên hãy hiển thị các nút điều khiển cảm ứng khi khởi chạy. Nếu người chơi bắt đầu chơi bằng bàn phím hoặc tay điều khiển trò chơi và không sử dụng màn hình cảm ứng trong một khoảng thời gian, hãy làm mờ lớp cảm ứng.
- Nếu người chơi đang sử dụng tay điều khiển và nhấn phím trên bàn phím, hãy chuyển hướng gợi ý trong trò chơi để hiển thị các nút trên bàn phím thay vì các nút trên tay điều khiển.
- Khi người chơi sử dụng cả bàn phím và tay điều khiển cùng một lúc, hãy tạo độ trễ trước khi chuyển đổi giao diện người dùng từ một bộ gợi ý sang bộ gợi ý khác để tránh hiện tượng nhấp nháy màn hình.
- Kiểm tra loại nguồn đầu vào khi xử lý dữ liệu đầu vào; cả phím bàn phím và nút tay điều khiển đều phát ra sự kiện nhấn phím.
- Cố gắng không đánh dấu dữ liệu đầu vào là đã xử lý trừ phi trò chơi của bạn có thể xử lý dữ liệu đó. Android phát lại một số sự kiện để hỗ trợ khả năng tương thích trên các kiểu dáng mới hơn, ví dụ: chuyển nút A của tay điều khiển thành nút OK.
Chú thích tính năng hỗ trợ đầu vào trong tệp kê khai
Mặc dù không bắt buộc, nhưng tốt nhất bạn nên chú thích bằng cờ tính năng tệp kê khai về loại dữ liệu đầu vào mà bạn xử lý. Các cờ phổ biến là:
android.hardware.type.pc
: Tắt các lớp tương thích đầu vào trên cả ChromeOS và máy tính để cho phép nhà phát triển trực tiếp xử lý các sự kiện chuột. Đặtandroid:required="false"
để trò chơi vẫn được phân phối đến điện thoại.android.hardware.gamepad
: Ứng dụng và trò chơi nhận được sự kiện tay điều khiển trò chơi cho dù có hỗ trợ tay điều khiển trò chơi hay không. Việc xác định cờ tệp kê khai này và thiết lậpandroid:required="false"
cho phép phân phát trò chơi của bạn đến các thiết bị Android TV có tay điều khiển trò chơi được đính kèm.
-
Nhà sản xuất có thể tích hợp tính năng hỗ trợ bút cảm ứng cho một số thiết bị, nhưng không có kiểu dáng nào được đảm bảo hỗ trợ. Bạn có thể cắm bảng vẽ vào thiết bị Android và bảng vẽ sẽ xuất hiện dưới dạng bút cảm ứng. ↩
-
Mặc dù một số máy tính có hỗ trợ màn hình cảm ứng và bút cảm ứng, nhưng ứng dụng Google Play Games chỉ phản hồi các sự kiện chuột từ hệ điều hành lưu trữ. Để tối đa hoá khả năng tương thích, theo mặc định, các sự kiện chuột sẽ xuất hiện dưới dạng sự kiện chạm trong ứng dụng. Hãy xem phần Nhập bằng chuột để biết thêm thông tin. ↩
-
Thiết bị ChromeOS thường hỗ trợ chuột và bàn phím, nhưng không bắt buộc phải có màn hình cảm ứng. Nhiều thiết bị có màn hình cảm ứng cũng hỗ trợ phương thức nhập bằng bút cảm ứng. ↩
-
Android Automotive OS đề cập đến những chiếc ô tô tích hợp sẵn Android và có thể hoạt động mà không cần điện thoại Android. Biểu đồ này đề cập đến Automotive OS. Android Auto chiếu một ứng dụng từ điện thoại lên ô tô và các thiết bị hỗ trợ Android Auto (chiếu) có thể không có màn hình cảm ứng. ↩
-
Thiết bị Wear OS có khả năng kết nối bị hạn chế. Bạn có thể quét để tìm thiết bị ngoại vi Bluetooth, nhưng hệ điều hành thường không kết nối được. ↩