Phím bàn phím và action. Tiếp...
Classes | |
| struct | njin::input_source |
| Một nguồn nhập liệu: một phím, một nút chuột, hoặc một nút tay cầm. Tiếp... | |
| struct | njin::binding |
| Một nguồn viết gọn cho action_define(): truyền thẳng một phím, một nút chuột hoặc một nút tay cầm, không cần dựng njin::input_source. Tiếp... | |
| struct | njin::axis_keys |
| Một cặp phím của axis: phím cho chiều âm và phím cho chiều dương. Tiếp... | |
Các hàm | |
| const char * | njin::input_source_name (input_source source) |
| Tên hiển thị của một nguồn, bằng tiếng Anh ngắn như trên bàn phím: "Space", "A", "Left Shift", "Mouse Left", "Pad A" (theo vị trí nút của Xbox). | |
| const char * | njin::key_name (key_code key) |
| Tên hiển thị của một phím. | |
| bool | njin::input_any_pressed (const context &ctx, input_source &out) |
| Nguồn vừa được nhấn ở frame này, nếu có: dùng cho màn hình "bấm phím mới". | |
| std::vector< input_source > | njin::action_sources (const context &ctx, action_handle action) |
| Các nguồn đang gắn vào một action, theo thứ tự: phím, chuột, tay cầm. | |
| void | njin::action_bind (context &ctx, action_handle action, input_source source) |
| Gắn một nguồn vào action (như action_bind_key(), action_bind_mouse(), action_bind_pad() tùy loại). | |
| void | njin::action_unbind (context &ctx, action_handle action, input_source source) |
| Gỡ một nguồn khỏi action. | |
| void | njin::action_rebind (context &ctx, action_handle action, input_source source) |
| Gắn source vào action thay cho nguồn cùng loại đang có (phím thay phím, nút tay cầm thay nút tay cầm), và gỡ nó khỏi mọi action khác để một phím không làm hai việc. | |
| action_handle | njin::action_define (context &ctx, const char *name, std::initializer_list< binding > sources) |
| Đăng ký một action và gắn mọi nguồn của nó trong một lời gọi. | |
| axis_handle | njin::axis_define (context &ctx, const char *name, std::initializer_list< axis_keys > keys, std::initializer_list< gamepad_axis > pads={}) |
| Đăng ký một axis và gắn mọi cặp phím và trục tay cầm của nó trong một lời gọi. | |
| json_value | njin::input_bindings_save (const context &ctx) |
| Mọi phím đã gắn (action và axis) dạng JSON, để lưu vào file cài đặt: {"actions": {"jump": ["key:space", "pad:face_down"]}, "axes": {"move":
{"keys": [["left", "right"]], "pad": ["left_x"]}}}. | |
| bool | njin::input_bindings_load (context &ctx, const json_value &json) |
| Nạp phím từ JSON của input_bindings_save(). | |
| void | njin::pad_rumble (context &ctx, i32 pad, f32 low, f32 high, f32 seconds) |
| Rung tay cầm. | |
| bool | njin::key_pressed (const context &ctx, key_code key) |
| Đúng ở frame mà phím vừa được nhấn xuống (chỉ một frame). | |
| bool | njin::key_held (const context &ctx, key_code key) |
| Đúng khi phím đã được giữ từ frame trước và vẫn đang giữ. | |
| bool | njin::key_released (const context &ctx, key_code key) |
| Đúng ở frame mà phím vừa được thả ra (chỉ một frame). | |
| action_handle | njin::action_register (context &ctx, const char *name) |
| Đăng ký một action có tên. | |
| action_handle | njin::action_find (const context &ctx, const char *name) |
| Tìm action theo tên. | |
| void | njin::action_bind_key (context &ctx, action_handle handle, key_code key) |
| Gắn một phím vào action. | |
| void | njin::action_bind_mouse (context &ctx, action_handle handle, mouse_button button) |
| Gắn một nút chuột vào action. | |
| void | njin::action_bind_pad (context &ctx, action_handle handle, gamepad_button button) |
| Gắn một nút tay cầm vào action. | |
| void | njin::action_clear_binds (context &ctx, action_handle handle) |
| Xóa mọi phím, nút chuột và nút tay cầm đã gắn vào action. | |
| bool | njin::action_pressed (const context &ctx, action_handle handle) |
| Đúng ở frame mà một trong các nguồn của action (phím, nút chuột, nút tay cầm) vừa được nhấn. | |
| bool | njin::action_held (const context &ctx, action_handle handle) |
| Đúng khi một trong các nguồn của action đã được giữ từ frame trước và vẫn đang giữ. | |
| bool | njin::action_released (const context &ctx, action_handle handle) |
| Đúng ở frame mà một trong các nguồn của action vừa được thả. | |
| vec2 | njin::mouse_pos (const context &ctx) |
| Vị trí con trỏ chuột, tính bằng pixel màn hình. | |
| vec2 | njin::mouse_delta (const context &ctx) |
| Độ dời của chuột so với frame trước, tính bằng pixel. | |
| f32 | njin::mouse_wheel (const context &ctx) |
| Số nấc cuộn bánh xe chuột trong frame này. | |
| bool | njin::mouse_pressed (const context &ctx, mouse_button button) |
| Đúng ở frame mà nút chuột vừa được nhấn xuống (chỉ một frame). | |
| bool | njin::mouse_held (const context &ctx, mouse_button button) |
| Đúng khi nút chuột đã được giữ từ frame trước và vẫn đang giữ. | |
| bool | njin::mouse_released (const context &ctx, mouse_button button) |
| Đúng ở frame mà nút chuột vừa được thả (chỉ một frame). | |
| bool | njin::pad_available (const context &ctx, i32 pad) |
| Tay cầm số pad có đang được cắm không. | |
| bool | njin::pad_pressed (const context &ctx, i32 pad, gamepad_button button) |
| Đúng ở frame mà nút tay cầm vừa được nhấn xuống (chỉ một frame). | |
| bool | njin::pad_held (const context &ctx, i32 pad, gamepad_button button) |
| Đúng khi nút tay cầm đã được giữ từ frame trước và vẫn đang giữ. | |
| bool | njin::pad_released (const context &ctx, i32 pad, gamepad_button button) |
| Đúng ở frame mà nút tay cầm vừa được thả (chỉ một frame). | |
| f32 | njin::pad_axis (const context &ctx, i32 pad, gamepad_axis axis) |
| Giá trị một trục analog của tay cầm. | |
| void | njin::pad_set_deadzone (context &ctx, f32 deadzone) |
| Đặt vùng chết cho mọi cần trên mọi tay cầm. | |
| i32 | njin::text_count (const context &ctx) |
| Số ký tự đã gõ trong frame này. | |
| i32 | njin::text_char (const context &ctx, i32 index) |
| Mã Unicode của ký tự thứ index đã gõ trong frame này, theo thứ tự gõ. | |
| void | njin::key_consume (context &ctx, key_code key) |
| Xóa trạng thái của một phím trong phần còn lại của frame. | |
| void | njin::mouse_consume (context &ctx, mouse_button button) |
| Xóa trạng thái của một nút chuột trong phần còn lại của frame. | |
| void | njin::mouse_wheel_consume (context &ctx) |
| Xóa cuộn bánh xe trong phần còn lại của frame. | |
| axis_handle | njin::axis_register (context &ctx, const char *name) |
| Đăng ký một axis có tên. | |
| axis_handle | njin::axis_find (const context &ctx, const char *name) |
| Tìm axis theo tên. | |
| void | njin::axis_bind_keys (context &ctx, axis_handle handle, key_code negative, key_code positive) |
| Gắn một cặp phím vào axis, đóng vai một cần analog. | |
| void | njin::axis_bind_pad (context &ctx, axis_handle handle, gamepad_axis axis) |
| Gắn một trục tay cầm vào axis. | |
| void | njin::axis_clear_binds (context &ctx, axis_handle handle) |
| Xóa mọi cặp phím và trục tay cầm đã gắn vào axis. | |
| f32 | njin::axis_value (const context &ctx, axis_handle handle) |
| Giá trị hiện tại của axis. | |
Các biến | |
| constexpr i32 | njin::gamepad_max = 4 |
| Số tay cầm tối đa được theo dõi. Chỉ số tay cầm hợp lệ là 0..gamepad_max-1. | |
Phím bàn phím và action.
| enum njin::key_code |
Mã phím bàn phím, dùng với key_pressed(), action_bind_key() và các hàm liên quan.
| enum njin::mouse_button |
Nút chuột, dùng với mouse_pressed(), action_bind_mouse() và các hàm liên quan.
| enum njin::gamepad_button |
Nút tay cầm, dùng với pad_pressed(), action_bind_pad() và các hàm liên quan.
Tên nút mặt theo vị trí, không theo nhãn: pad_face_down là A trên Xbox và Cross (X) trên PlayStation.
| enum njin::gamepad_axis |
Trục analog của tay cầm, dùng với pad_axis() và axis_bind_pad().
| const char * njin::input_source_name | ( | input_source | source | ) |
Tên hiển thị của một nguồn, bằng tiếng Anh ngắn như trên bàn phím: "Space", "A", "Left Shift", "Mouse Left", "Pad A" (theo vị trí nút của Xbox).
| source | Nguồn. |
| const char * njin::key_name | ( | key_code | key | ) |
| bool njin::input_any_pressed | ( | const context & | ctx, |
| input_source & | out ) |
Nguồn vừa được nhấn ở frame này, nếu có: dùng cho màn hình "bấm phím mới".
Xét bàn phím trước, rồi chuột, rồi mọi tay cầm.
| ctx | Context của engine. |
| out | Nhận nguồn vừa nhấn. |
| std::vector< input_source > njin::action_sources | ( | const context & | ctx, |
| action_handle | action ) |
Các nguồn đang gắn vào một action, theo thứ tự: phím, chuột, tay cầm.
| ctx | Context của engine. |
| action | Action. |
| void njin::action_bind | ( | context & | ctx, |
| action_handle | action, | ||
| input_source | source ) |
Gắn một nguồn vào action (như action_bind_key(), action_bind_mouse(), action_bind_pad() tùy loại).
| ctx | Context của engine. |
| action | Action. |
| source | Nguồn. |
| void njin::action_unbind | ( | context & | ctx, |
| action_handle | action, | ||
| input_source | source ) |
Gỡ một nguồn khỏi action.
| ctx | Context của engine. |
| action | Action. |
| source | Nguồn. |
| void njin::action_rebind | ( | context & | ctx, |
| action_handle | action, | ||
| input_source | source ) |
Gắn source vào action thay cho nguồn cùng loại đang có (phím thay phím, nút tay cầm thay nút tay cầm), và gỡ nó khỏi mọi action khác để một phím không làm hai việc.
Đây là việc một màn hình đổi phím cần.
| ctx | Context của engine. |
| action | Action. |
| source | Nguồn mới. |
|
inline |
Đăng ký một action và gắn mọi nguồn của nó trong một lời gọi.
Thay cho action_register() rồi action_bind_key(), action_bind_mouse(), action_bind_pad() lần lượt:
Nếu tên đã có thì các nguồn được thêm vào action đó, như action_bind(). Gọi trước settings_load() hay input_bindings_load(): phím người chơi đã đổi sẽ thay các phím mặc định này.
| ctx | Context của engine. |
| name | Tên action. |
| sources | Các phím, nút chuột và nút tay cầm, theo bất kỳ thứ tự nào. |
|
inline |
Đăng ký một axis và gắn mọi cặp phím và trục tay cầm của nó trong một lời gọi.
Thay cho axis_register() rồi axis_bind_keys(), axis_bind_pad() lần lượt:
Nếu tên đã có thì các nguồn được thêm vào axis đó. Gọi trước settings_load().
| ctx | Context của engine. |
| name | Tên axis. |
| keys | Các cặp phím (âm, dương). |
| pads | Các trục tay cầm. Có thể bỏ trống. |
| json_value njin::input_bindings_save | ( | const context & | ctx | ) |
Mọi phím đã gắn (action và axis) dạng JSON, để lưu vào file cài đặt: {"actions": {"jump": ["key:space", "pad:face_down"]}, "axes": {"move": {"keys": [["left", "right"]], "pad": ["left_x"]}}}.
| ctx | Context của engine. |
| bool njin::input_bindings_load | ( | context & | ctx, |
| const json_value & | json ) |
Nạp phím từ JSON của input_bindings_save().
Action và axis có trong JSON được thay toàn bộ phím; cái không có giữ nguyên, nên thêm action mới trong bản cập nhật game vẫn có phím mặc định. Tên lạ bị bỏ qua (có log).
| ctx | Context của engine. |
| json | Dữ liệu. |
Rung tay cầm.
| ctx | Context của engine. |
| pad | Chỉ số tay cầm. |
| low | Độ mạnh mô-tơ trái (rung trầm), 0..1. |
| high | Độ mạnh mô-tơ phải (rung nhanh), 0..1. |
| seconds | Thời gian rung. |
| bool njin::key_pressed | ( | const context & | ctx, |
| key_code | key ) |
Đúng ở frame mà phím vừa được nhấn xuống (chỉ một frame).
| ctx | Context của engine. |
| key | Phím cần kiểm tra. |
| bool njin::key_held | ( | const context & | ctx, |
| key_code | key ) |
Đúng khi phím đã được giữ từ frame trước và vẫn đang giữ.
Lưu ý: ở frame nhấn đầu tiên hàm này trả về false (lúc đó key_pressed() trả về true). Muốn biết phím có đang được ấn hay không thì dùng key_pressed(...) || key_held(...).
| ctx | Context của engine. |
| key | Phím cần kiểm tra. |
| bool njin::key_released | ( | const context & | ctx, |
| key_code | key ) |
Đúng ở frame mà phím vừa được thả ra (chỉ một frame).
| ctx | Context của engine. |
| key | Phím cần kiểm tra. |
| action_handle njin::action_register | ( | context & | ctx, |
| const char * | name ) |
Đăng ký một action có tên.
Nếu tên đã tồn tại thì trả về handle cũ.
Action là một tên logic (ví dụ "jump") có thể gắn với một hoặc nhiều phím.
| ctx | Context của engine. |
| name | Tên action. |
| action_handle njin::action_find | ( | const context & | ctx, |
| const char * | name ) |
Tìm action theo tên.
| ctx | Context của engine. |
| name | Tên action. |
| void njin::action_bind_key | ( | context & | ctx, |
| action_handle | handle, | ||
| key_code | key ) |
Gắn một phím vào action.
Có thể gắn nhiều phím vào cùng một action.
| ctx | Context của engine. |
| handle | Action cần gắn. |
| key | Phím cần gắn. Phím không hợp lệ bị bỏ qua. |
| void njin::action_bind_mouse | ( | context & | ctx, |
| action_handle | handle, | ||
| mouse_button | button ) |
Gắn một nút chuột vào action.
Có thể gắn lẫn phím, nút chuột và nút tay cầm vào cùng một action: nguồn nào thỏa cũng làm action thỏa.
| ctx | Context của engine. |
| handle | Action cần gắn. |
| button | Nút chuột cần gắn. Nút không hợp lệ bị bỏ qua. |
| void njin::action_bind_pad | ( | context & | ctx, |
| action_handle | handle, | ||
| gamepad_button | button ) |
Gắn một nút tay cầm vào action.
Bất kỳ tay cầm nào đang cắm đều thỏa.
| ctx | Context của engine. |
| handle | Action cần gắn. |
| button | Nút tay cầm cần gắn. Nút không hợp lệ bị bỏ qua. |
| void njin::action_clear_binds | ( | context & | ctx, |
| action_handle | handle ) |
Xóa mọi phím, nút chuột và nút tay cầm đã gắn vào action.
Đổi phím trong lúc chạy là gọi hàm này rồi bind lại. Dùng được ở mọi lúc, không chỉ trong setup.
| ctx | Context của engine. |
| handle | Action cần xóa. |
| bool njin::action_pressed | ( | const context & | ctx, |
| action_handle | handle ) |
Đúng ở frame mà một trong các nguồn của action (phím, nút chuột, nút tay cầm) vừa được nhấn.
| ctx | Context của engine. |
| handle | Action cần kiểm tra. |
| bool njin::action_held | ( | const context & | ctx, |
| action_handle | handle ) |
Đúng khi một trong các nguồn của action đã được giữ từ frame trước và vẫn đang giữ.
Cùng quy tắc với key_held().
| ctx | Context của engine. |
| handle | Action cần kiểm tra. |
| bool njin::action_released | ( | const context & | ctx, |
| action_handle | handle ) |
Đúng ở frame mà một trong các nguồn của action vừa được thả.
| ctx | Context của engine. |
| handle | Action cần kiểm tra. |
| vec2 njin::mouse_pos | ( | const context & | ctx | ) |
Vị trí con trỏ chuột, tính bằng pixel màn hình.
Không qua camera. Dùng scr2w() để đổi sang vị trí trong thế giới.
| ctx | Context của engine. |
| vec2 njin::mouse_delta | ( | const context & | ctx | ) |
Độ dời của chuột so với frame trước, tính bằng pixel.
| ctx | Context của engine. |
| f32 njin::mouse_wheel | ( | const context & | ctx | ) |
Số nấc cuộn bánh xe chuột trong frame này.
Dương là cuộn ra xa người dùng. Đa số frame trả về 0.
| ctx | Context của engine. |
| bool njin::mouse_pressed | ( | const context & | ctx, |
| mouse_button | button ) |
Đúng ở frame mà nút chuột vừa được nhấn xuống (chỉ một frame).
| ctx | Context của engine. |
| button | Nút cần kiểm tra. |
| bool njin::mouse_held | ( | const context & | ctx, |
| mouse_button | button ) |
Đúng khi nút chuột đã được giữ từ frame trước và vẫn đang giữ.
Cùng quy tắc với key_held(): ở frame nhấn đầu tiên trả về false.
| ctx | Context của engine. |
| button | Nút cần kiểm tra. |
| bool njin::mouse_released | ( | const context & | ctx, |
| mouse_button | button ) |
Đúng ở frame mà nút chuột vừa được thả (chỉ một frame).
| ctx | Context của engine. |
| button | Nút cần kiểm tra. |
| bool njin::pad_available | ( | const context & | ctx, |
| i32 | pad ) |
Tay cầm số pad có đang được cắm không.
Chưa cắm thì mọi hàm pad_* đọc như không nhấn, không báo lỗi.
| ctx | Context của engine. |
| pad | Chỉ số tay cầm, từ 0 đến gamepad_max - 1. |
| bool njin::pad_pressed | ( | const context & | ctx, |
| i32 | pad, | ||
| gamepad_button | button ) |
Đúng ở frame mà nút tay cầm vừa được nhấn xuống (chỉ một frame).
| ctx | Context của engine. |
| pad | Chỉ số tay cầm, từ 0 đến gamepad_max - 1. |
| button | Nút cần kiểm tra. |
| bool njin::pad_held | ( | const context & | ctx, |
| i32 | pad, | ||
| gamepad_button | button ) |
Đúng khi nút tay cầm đã được giữ từ frame trước và vẫn đang giữ.
Cùng quy tắc với key_held().
| ctx | Context của engine. |
| pad | Chỉ số tay cầm, từ 0 đến gamepad_max - 1. |
| button | Nút cần kiểm tra. |
| bool njin::pad_released | ( | const context & | ctx, |
| i32 | pad, | ||
| gamepad_button | button ) |
Đúng ở frame mà nút tay cầm vừa được thả (chỉ một frame).
| ctx | Context của engine. |
| pad | Chỉ số tay cầm, từ 0 đến gamepad_max - 1. |
| button | Nút cần kiểm tra. |
| f32 njin::pad_axis | ( | const context & | ctx, |
| i32 | pad, | ||
| gamepad_axis | axis ) |
Giá trị một trục analog của tay cầm.
Đã qua vùng chết và được co giãn lại, nên rời khỏi 0 một cách mượt thay vì nhảy bậc. Cò nghỉ ở -1 và đọc 1 khi nhấn hết (theo quy ước của raylib, không đổi lại).
| ctx | Context của engine. |
| pad | Chỉ số tay cầm, từ 0 đến gamepad_max - 1. |
| axis | Trục cần đọc. |
| void njin::pad_set_deadzone | ( | context & | ctx, |
| f32 | deadzone ) |
Đặt vùng chết cho mọi cần trên mọi tay cầm.
Mặc định 0.15.
| ctx | Context của engine. |
| deadzone | Vùng chết, được giới hạn trong khoảng 0 đến 0.95. |
| i32 njin::text_count | ( | const context & | ctx | ) |
Số ký tự đã gõ trong frame này.
Ký tự đã qua bố cục bàn phím của hệ điều hành và phím chết. Đây là thứ một ô nhập văn bản cần; còn key_pressed() là thứ một phím tắt cần, hai câu hỏi khác nhau.
| ctx | Context của engine. |
Mã Unicode của ký tự thứ index đã gõ trong frame này, theo thứ tự gõ.
| ctx | Context của engine. |
| index | Chỉ số, từ 0 đến text_count() - 1. |
| void njin::key_consume | ( | context & | ctx, |
| key_code | key ) |
Xóa trạng thái của một phím trong phần còn lại của frame.
System chạy sau đó không thấy phím này được nhấn hay giữ. Đây là cách một menu nuốt phím trước khi thế giới bên dưới xử lý cùng phím đó. Trạng thái được đọc lại ở frame sau, nên hiệu lực không kéo dài quá frame gọi nó.
| ctx | Context của engine. |
| key | Phím cần xóa. |
| void njin::mouse_consume | ( | context & | ctx, |
| mouse_button | button ) |
Xóa trạng thái của một nút chuột trong phần còn lại của frame.
Xem key_consume().
| ctx | Context của engine. |
| button | Nút cần xóa. |
| void njin::mouse_wheel_consume | ( | context & | ctx | ) |
Xóa cuộn bánh xe trong phần còn lại của frame.
Xem key_consume().
| ctx | Context của engine. |
| axis_handle njin::axis_register | ( | context & | ctx, |
| const char * | name ) |
Đăng ký một axis có tên.
Nếu tên đã tồn tại thì trả về handle cũ.
Axis đọc giá trị từ -1 đến 1, khác action là đúng hoặc sai. Muốn một vector hai chiều thì đọc hai axis rồi ghép lại: chỉ người gọi biết có cần chuẩn hóa vector đó hay không.
| ctx | Context của engine. |
| name | Tên axis. |
| axis_handle njin::axis_find | ( | const context & | ctx, |
| const char * | name ) |
Tìm axis theo tên.
| ctx | Context của engine. |
| name | Tên axis. |
| void njin::axis_bind_keys | ( | context & | ctx, |
| axis_handle | handle, | ||
| key_code | negative, | ||
| key_code | positive ) |
Gắn một cặp phím vào axis, đóng vai một cần analog.
Chỉ phím âm thì đọc -1, chỉ phím dương thì đọc 1, cả hai hoặc không phím nào thì đọc 0.
| ctx | Context của engine. |
| handle | Axis cần gắn. |
| negative | Phím cho chiều âm. |
| positive | Phím cho chiều dương. |
| void njin::axis_bind_pad | ( | context & | ctx, |
| axis_handle | handle, | ||
| gamepad_axis | axis ) |
Gắn một trục tay cầm vào axis.
Bất kỳ tay cầm nào đang cắm đều được đọc.
| ctx | Context của engine. |
| handle | Axis cần gắn. |
| axis | Trục tay cầm cần gắn. Trục không hợp lệ bị bỏ qua. |
| void njin::axis_clear_binds | ( | context & | ctx, |
| axis_handle | handle ) |
Xóa mọi cặp phím và trục tay cầm đã gắn vào axis.
| ctx | Context của engine. |
| handle | Axis cần xóa. |
| f32 njin::axis_value | ( | const context & | ctx, |
| axis_handle | handle ) |
Giá trị hiện tại của axis.
Nguồn nào lệch xa vị trí nghỉ nhất thì thắng, nên cần đẩy nửa chừng không bị cặp phím đang đứng yên ở 0 làm phẳng, và ngược lại.
| ctx | Context của engine. |
| handle | Axis cần đọc. |