Nhân vật đi 8 hướng, quái đuổi theo qua các lối đi, cây che nhân vật đúng chỗ. Game mẫu njin_topdown (Game mẫu và đóng gói) dùng đúng những thứ này. Chưa làm gì bao giờ? Bắt đầu với Nhân vật đi 8 hướng trong 50 dòng : một nhân vật đi được trong 50 dòng.
#include <njin.h>
#include <vector>
namespace {
struct chaser {
float repath = 0.0f;
};
struct game {
entt::entity player = entt::null;
} g;
void startup(njin::context &ctx) {
}
void chase(njin::context &ctx) {
continue;
if (c.repath <= 0.0f) {
c.repath = 0.4f;
std::vector<njin::vec2> path;
c.agent.set(std::move(path));
}
}
}
void setup(njin::context &ctx) {
}
}
int main() {
njin::context *ctx =
njin::create({.title =
"Top-down", .width = 1280, .height = 720, .target_fps = 60});
}
rect level_bounds(const context &ctx, level_handle level)
Khung của một level trong thế giới, dùng cho camera_follow::bounds.
constexpr u32 layer_bit(i32 n)
Bit của lớp va chạm thứ n (0..31), để đặt tên lớp cho dễ đọc: constexpr u32 layer_enemy = njin::layer...
Definition njin_collision.h:21
bool collision_line_of_sight(const context &ctx, vec2 from, vec2 to, u32 mask=layer_all, entt::entity ignore=entt::null)
Có nhìn thấy nhau không: tia từ from đến to không trúng vật cản nào.
Definition njin_collision.h:256
void run(context &ctx)
Chạy vòng lặp chính cho đến khi cửa sổ đóng.
context * create(const config &cfg)
Mở cửa sổ và trả về context của engine.
void destroy(context *ctx)
Giải phóng mọi tài nguyên của engine và đóng cửa sổ.
void draw_set_y_sort(context &ctx, i32 layer, bool on)
Bật sắp xếp theo Y cho một lớp vẽ: trong lớp đó, sprite và particle có y lớn hơn (thấp hơn trên màn h...
const char * tr(const context &ctx, const char *key)
Chuỗi đã dịch của key trong ngôn ngữ đang dùng.
level_handle level_load(context &ctx, const char *path, const level_desc &desc={})
Nạp một bản đồ và tạo entity cho nó.
void ecs_register(context &ctx, sys_phase phase, sys_fnc fnc, const char *name=nullptr)
Thêm một system vào lịch chạy của một phase.
void mod_register(context &ctx, const mod_desc &desc)
Chạy setup của module và đưa các system của nó vào lịch chạy.
entt::registry & world(context &ctx)
Trả về registry của EnTT chứa mọi entity và component của game.
@ phase_startup
Một lần, trước frame đầu tiên.
Definition _mod.h:32
@ phase_fixed_update
Theo nhịp cố định, 0 hoặc nhiều lần mỗi frame. Cho vật lý.
Definition _mod.h:34
bool nav_find_path(const nav_grid &grid, vec2 from, vec2 to, std::vector< vec2 > &out, const nav_path_opts &opts={})
Tìm đường ngắn nhất (A*) từ from đến to.
nav_grid nav_grid_from_world(const context &ctx, rect area, vec2 cell_size, u32 mask=0xFFFFFFFFu)
Dựng lưới phủ area từ vật cản đang có trong thế giới: mọi ô chồng lên một collider không phải trigger...
vec2 nav_steer(nav_agent &agent, vec2 pos)
Hướng cần đi để theo đường, độ dài 1, hoặc {0, 0} khi đã tới cuối.
f32 delta(const context &ctx)
Thời gian của frame trước, tính bằng giây, đã nhân với tốc độ thời gian.
std::int32_t i32
Số nguyên có dấu 32 bit.
Definition _types.h:14
std::uint32_t u32
Số nguyên không dấu 32 bit.
Definition _types.h:22
Định danh của một level đã nạp, trả về từ level_load().
Definition njin_level.h:20
Một con đường đang được đi theo, dùng với nav_steer().
Definition njin_nav.h:132
Lưới tìm đường: mỗi ô có một chi phí để đi vào, 0 là không đi được.
Definition njin_nav.h:18
Nhân vật top-down: đi 8 hướng (hoặc mọi hướng với cần analog), trượt dọc tường, lướt.
Definition njin_body.h:97
Vector 2 chiều. Dùng cho vị trí, kích thước, độ dời.
Definition _types.h:39
Một cái cây phải che nhân vật đứng sau nó, và bị nhân vật che khi đứng trước. Bật cho một lớp vẽ:
Nước, đuốc, cỏ lay: khai báo animation cho ô trong Tiled (animation editor của tileset) và engine chạy chúng, cả khi bản đồ đã bake vào ảnh chunk. Hoặc tự đặt bằng tilemap_animate(). Xem Tilemap.