Nhân vật platformer: chạy, nhảy, rơi, trèo dốc, đứng trên bục di chuyển. Tiếp...
#include <njin_body.h>
Các thuộc tính Public | |
| f32 | run_speed = 110.0f |
| Tốc độ chạy tối đa. | |
| f32 | ground_accel = 1200.0f |
| Tăng tốc trên đất. | |
| f32 | ground_decel = 1600.0f |
| Giảm tốc trên đất khi thả nút (hoặc đổi hướng). | |
| f32 | air_accel = 800.0f |
| Tăng tốc trên không. | |
| f32 | air_decel = 500.0f |
| Giảm tốc trên không. | |
| f32 | gravity = 1000.0f |
| Gia tốc rơi khi đang lên. | |
| f32 | fall_gravity = 1600.0f |
| Gia tốc rơi khi đang xuống. Lớn hơn gravity cho cú nhảy chắc tay. | |
| f32 | max_fall = 360.0f |
| Tốc độ rơi tối đa. | |
| f32 | jump_speed = 300.0f |
| Vận tốc lên lúc bắt đầu nhảy. | |
| f32 | jump_cut = 0.45f |
| Nhân vào vận tốc lên khi thả nút nhảy sớm. 1 là tắt. | |
| f32 | coyote_time = 0.09f |
| Giây sau khi rời mép vẫn nhảy được. | |
| f32 | jump_buffer = 0.12f |
| Giây nhớ lệnh nhảy bấm sớm. | |
| i32 | air_jumps = 0 |
| Số lần nhảy thêm trên không. 1 là nhảy đôi. | |
| f32 | wall_slide_speed = 0.0f |
| Tốc độ trượt tường khi áp vào tường lúc rơi. 0 là tắt. | |
| vec2 | wall_jump {0.0f, 0.0f} |
| Vận tốc khi nhảy khỏi tường (x ra xa tường, y lên). 0 là tắt. | |
| f32 | wall_jump_lock = 0.15f |
| Giây bỏ qua move_x sau khi nhảy tường, để bật ra được. | |
| platformer_input | input {} |
| Điều khiển, game ghi vào. | |
| vec2 | velocity {} |
| Vận tốc hiện tại. Game được ghi (đẩy lùi, lò xo). | |
| bool | grounded = false |
| Đang đứng trên đất, dốc hoặc bục. | |
| bool | on_slope = false |
| Đang đứng trên dốc. | |
| i32 | on_wall = 0 |
| -1 áp tường bên trái, 1 bên phải, 0 không. | |
| i32 | facing = 1 |
| Hướng nhìn: -1 trái, 1 phải. Theo input.move_x. | |
| entt::entity | ground = entt::null |
| Entity đang đứng lên (tilemap hoặc bục). | |
| bool | jumped = false |
| Vừa nhảy trong nhịp vật lý cuối cùng. | |
| bool | landed = false |
| Vừa chạm đất trong nhịp vật lý cuối cùng. | |
| f32 | coyote_timer = 0.0f |
| Thời gian coyote còn lại. | |
| f32 | buffer_timer = 0.0f |
| Thời gian lệnh nhảy còn được nhớ. | |
| f32 | drop_timer = 0.0f |
| Thời gian còn xuyên bục một chiều. | |
| f32 | wall_lock_timer = 0.0f |
| Thời gian còn bỏ qua move_x sau nhảy tường. | |
| i32 | air_jumps_left = 0 |
| Số lần nhảy trên không còn lại. | |
| bool | rising = false |
| Đang lên từ một cú nhảy mà nút còn được giữ. | |
| bool | ground_one_way = false |
| Mặt đang đứng là bục một chiều. | |
Nhân vật platformer: chạy, nhảy, rơi, trèo dốc, đứng trên bục di chuyển.
Cần transform và njin::collider hộp trên cùng entity. Module body của engine, trong phase_fixed_update, đọc input, tính velocity và di chuyển entity bằng collision_move(), rồi ghi lại trạng thái (grounded, on_wall...). Game chỉ cần đặt input và đọc trạng thái để chọn animation.
Các cảm giác quen thuộc của platformer đều có sẵn:
Muốn đẩy lùi khi trúng đòn thì ghi thẳng vào velocity.
Mọi đơn vị là pixel và giây. Gửi event njin::body_jumped và njin::body_landed qua events().