Làm thế nào tôi có thể xử lý các bố trí bàn phím khác nhau?


10

Giả sử tôi có một trò chơi sử dụng các điều khiển WASD trên bố cục QWERTY. Cố gắng sử dụng các điều khiển này trên, giả sử, bố cục Dvorak không lý tưởng (tương đương với <A:Htrên QWERTY). Rõ ràng, tôi muốn sử dụng các phím vật lý giống như QWERTY sẽ sử dụng ( ,aoetrên DVORAK).

Tôi đã đưa ra một vài giải pháp khả thi:

  • Buộc người dùng sử dụng QWERTY
    • rõ ràng là không lý tưởng, đặc biệt là đối với người dùng quốc tế
  • Thay đổi phím tắt dựa trên bố cục bàn phím (WASD ->, aoe)
    • buộc tôi phải tạo bản đồ bố trí cho từng bố cục được hỗ trợ (tự động)
    • dễ dàng nhất cho người dùng nếu có nhiều phím tắt hơn chỉ WASD
  • Buộc người dùng tự xác định các phím tắt
    • Linh hoạt hơn
    • Khó chịu nếu có nhiều phím tắt
    • Có thể được sử dụng kết hợp với tùy chọn thứ hai
  • Sử dụng mã khóa phần cứng
    • nhất quán trên bàn phím?

Làm thế nào là loại điều này thường được xử lý?

Câu trả lời:


9

Nghe mã quét. Làm thế nào điều này được thực hiện tùy thuộc vào hệ điều hành của bạn, mà bạn không liệt kê. Trên Windows, bạn có thể nhận scancode cho một mã khóa ảo nhất định từ WM_KEYDOWN và bạn bè bằng cách sử dụng MapVirtualKey . Mã quét dựa trên khóa vật lý và không bị ảnh hưởng bởi bố cục.

Hãy đọc nhanh http://www.altdevblogaday.com/2011/10/02/i-never-managed-to-go-left-on-first-try/ .

Vì vậy, có, như Nicol Bolas đã nói, bạn có thể và nên cho phép người dùng làm việc xung quanh nó. Nhưng chỉ cần làm cho nó hoạt động ngay lập tức là không khó và người dùng của bạn sẽ đánh giá cao nó.

Lưu ý rằng bạn (có thể) xử lý nhập sai ký tự, giống như phần lớn các nhà phát triển trò chơi. Đảm bảo rằng đối với văn bản, bạn luôn sử dụng WM_CHAR (hoặc tương đương trên các HĐH khác) thay vì sử dụng WM_KEYDOWN cho nhập văn bản. Hoàn toàn sai khi cho rằng khi nhấn phím 'a', bạn nên nhập 'a' vào điều khiển nhập văn bản, do sử dụng Phím chết trên một số bố cục. Bạn cũng có thể hỗ trợ IME (hoặc hệ điều hành tương đương) cho các thị trường Đông Á có nhiều ký tự hơn mức có thể vừa vặn trên bàn phím và cần có giao diện người dùng đặc biệt để nhập. Xử lý IME trong một trò chơi là một nỗi đau (xử lý nó hoàn toàn là một nỗi đau), nhưng theo tôi thì đáng để tăng sức hấp dẫn của sản phẩm của bạn đối với một thị trường lớn hơn nhiều. Một lần nữa, WM_KEYDOWN sẽ không bao giờ được sử dụng cho văn bản.


Lời khuyên tốt. Tôi không liệt kê HĐH vì tôi đang tìm kiếm các hướng dẫn / kỳ vọng chung (tôi có thể xử lý các chi tiết triển khai).
beatgammit

6

Bạn phải luôn luôn cung cấp cho người chơi khả năng thay đổi các bài tập quan trọng của họ. Đó là cách nó "thường được xử lý": cho phép người chơi thay đổi chúng. Một số người chơi sẽ đặt bàn phím của họ thành QWERTY khi họ chơi trò chơi vì đó là điều mà hầu hết các trò chơi mong đợi. Một số người sẽ để chúng được đặt thành bàn phím hiện tại của họ và dựa vào khả năng thay đổi các phím.


1
Thế còn khi ngôn ngữ được thay đổi? Ví dụ: người Pháp có mong muốn thay đổi WASD -> ZQSD nếu họ muốn giữ bố cục AZERTY của mình, ngay cả khi trò chơi bằng tiếng Pháp không?
beatgammit

1
@tjameson: Bạn đã đọc câu trả lời của tôi chưa? Hãy để họ xác định lại nhiệm vụ chính của họ . Sau đó, sẽ không có vấn đề.
Nicol Bolas

1
Vâng, tôi đã đọc câu trả lời của bạn, và có lẽ tôi sẽ đi với lời khuyên của bạn. Tôi chỉ muốn chắc chắn rằng không có sự mong đợi khi giao hàng cho người dùng ở các địa phương khác nhau.
beatgammit

3

Trong trường hợp bạn không thể nghe mã quét (ví dụ như khi phát triển trò chơi flash), bạn có thể tạo một ràng buộc chính hoạt động cho càng nhiều bố cục càng tốt. Hầu hết các bố trí bàn phím rất giống nhau, chỉ có một vài ngoại lệ.

Các bố trí bàn phím theo ISO 9995 (hầu hết) được sắp xếp như sau:

Bố trí bàn phím sau ISO

Về cơ bản các phím màu đen là an toàn để sử dụng.


Để biết thêm chi tiết về bố trí bàn phím , hãy xem QWERTY , QWERTZ , AZERTYQZERTY
Chuck Walbourn

3

Hầu hết các trò chơi ngân sách lớn (những trò chơi có nhà phân phối quốc tế) sẽ hoạt động tốt, sử dụng ZQSD thay vì WASD cho bố cục rộng rãi. Một trò chơi phong nha cũng sẽ giới thiệu bố cục ở cấp độ đầu tiên, những người khác sẽ cho phép người chơi khám phá nó thông qua màn hình tùy chỉnh. Chiến lược thực hiện có thể được phát hiện bằng cách yêu cầu HĐH chuyển đổi bố cục. Trò chơi sử dụng scancodes (vị trí) bên trong và ánh xạ chúng tới mã phím (ký hiệu) khi hiển thị hộp thoại cấu hình và lời nhắc; hoặc nó sử dụng mã khóa bên trong và phát hiện bố cục khi khởi động hoặc trong lần khởi chạy đầu tiên.

Chiến lược đầu tiên (scancodes bên trong) mạnh mẽ hơn, nhưng đòi hỏi một chút cẩn thận để ngăn chặn sự trừu tượng bị rò rỉ. Hãy nhớ ánh xạ lại mã khóa vào mã khóa khi trình bày khóa cho người dùng (trong hướng dẫn, lời nhắc và hộp thoại tùy chỉnh). Bạn vẫn sẽ cần xem mã phím khi lấy văn bản (cho phép người chơi nhập tên của họ chẳng hạn). Nếu bạn cần xử lý nhiều văn bản hơn thế, hãy xem sử dụng hỗ trợ nhập văn bản của nền tảng, nằm ngoài phạm vi hoạt động của công cụ trò chơi (xử lý các phím chết, capslock, dán sao chép, phương thức nhập liệu nâng cao).

Khi chuyển một trò chơi không bao giờ sử dụng scancodes (không phải là trường hợp có động cơ tốt, vì scancodes cũng gần với phần cứng hơn và nhanh hơn), chiến lược khác có thể thực tế hơn. Bạn có thể ánh xạ scancodes tới mã khóa bằng các hàm SDL2 SDL_GetKeyFromScancodeSDL_GetScancodeFromKey hoặc tương đương với nền tảng cụ thể. Nếu bạn cũng sử dụng vòng lặp sự kiện SDL2, các chức năng đó sẽ vẫn chính xác trên các công tắc bố trí. Tránh các chức năng như GetPalLayout () trên Windows; không có gì đảm bảo rằng bạn sẽ có thể tìm thấy bố cục trong một danh sách đã biết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.