njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
Level

Nạp bản đồ từ Tiled và LDtk thành entity, tilemap và collider. Tiếp...

Classes

struct  njin::level_handle
 Định danh của một level đã nạp, trả về từ level_load(). Tiếp...
struct  njin::level_desc
 Cách nạp một level, dùng với level_load() và level_load_ldtk(). Tiếp...
struct  njin::level_object
 Một object đặt trong editor: điểm xuất hiện, cửa, vùng, quái... Tiếp...

Các hàm

level_handle njin::level_load (context &ctx, const char *path, const level_desc &desc={})
 Nạp một bản đồ và tạo entity cho nó.
level_handle njin::level_load_ldtk (context &ctx, const char *path, const char *level, const level_desc &desc={})
 Nạp một level cụ thể từ project LDtk.
bool njin::level_list_ldtk (const char *path, std::vector< std::string > &out)
 Tên mọi level trong một project LDtk, theo thứ tự trong editor.
void njin::level_unload (context &ctx, level_handle level)
 Hủy mọi entity mà level đã tạo và giải phóng ảnh của nó.
vec2 njin::level_size (const context &ctx, level_handle level)
 Kích thước level, pixel.
vec2 njin::level_origin (const context &ctx, level_handle level)
 Góc trên trái của level trong thế giới.
const json_value & njin::level_properties (const context &ctx, level_handle level)
 Thuộc tính tùy chỉnh của cả bản đồ (Tiled) hoặc của level (LDtk).
entt::entity njin::level_find (context &ctx, level_handle level, const char *name)
 Tìm object đầu tiên của level có tên (hoặc, nếu không có tên nào khớp, lớp) là name.

Mô tả chi tiết

Nạp bản đồ từ Tiled và LDtk thành entity, tilemap và collider.

Thông tin về hàm

◆ level_load()

level_handle njin::level_load ( context & ctx,
const char * path,
const level_desc & desc = {} )

Nạp một bản đồ và tạo entity cho nó.

Nhận file từ Tiled (.tmx, .tmj, hoặc .json xuất từ Tiled) và LDtk (.ldtk, nạp level đầu tiên; dùng level_load_ldtk() để chọn level). Tileset, ảnh và level tách file được tìm cạnh file bản đồ.

Tạo ra:

  • mỗi layer ô: một entity có transform và njin::tilemap (một layer dùng nhiều tileset thì một entity cho mỗi tileset); layer vật cản có thêm njin::collider collider_tiles;
  • mỗi layer IntGrid của LDtk: một tilemap ẩn, giá trị ô là giá trị IntGrid (1, 2, ...), đọc bằng tilemap_get(); layer vật cản có thêm collider;
  • mỗi object: một entity có transform và njin::level_object, dựng bằng prefab trùng tên với lớp của nó nếu có. Object hình ô (tile object) có thêm njin::sprite.

Chỉ nhận bản đồ lưới vuông (orthogonal), loại mà game top-down và platformer dùng; bản đồ isometric, lục giác bị từ chối (trả về handle id 0, có ghi log). Hỗ trợ bản đồ vô hạn, layer lồng nhau, dữ liệu CSV, base64, zlib, gzip. Chưa hỗ trợ (có cảnh báo): nén zstd, ô xoay chéo, tileset nhiều ảnh, ô animation.

Các tham số
ctxContext của engine.
pathĐường dẫn file bản đồ.
descCách nạp.
Giá trị trả về
Handle của level, hoặc handle id 0 nếu lỗi (có ghi log).

◆ level_load_ldtk()

level_handle njin::level_load_ldtk ( context & ctx,
const char * path,
const char * level,
const level_desc & desc = {} )

Nạp một level cụ thể từ project LDtk.

Các tham số
ctxContext của engine.
pathĐường dẫn file .ldtk.
levelTên level (identifier), hoặc null cho level đầu tiên.
descCách nạp.
Giá trị trả về
Handle của level, hoặc handle id 0 nếu lỗi.

◆ level_list_ldtk()

bool njin::level_list_ldtk ( const char * path,
std::vector< std::string > & out )

Tên mọi level trong một project LDtk, theo thứ tự trong editor.

Các tham số
pathĐường dẫn file .ldtk.
outNhận các tên (được thêm vào cuối).
Giá trị trả về
false nếu không đọc được file.

◆ level_unload()

void njin::level_unload ( context & ctx,
level_handle level )

Hủy mọi entity mà level đã tạo và giải phóng ảnh của nó.

Level gắn với scene (mặc định) tự được unload khi rời scene.

Các tham số
ctxContext của engine.
levelLevel. Handle không hợp lệ bị bỏ qua.

◆ level_size()

vec2 njin::level_size ( const context & ctx,
level_handle level )

Kích thước level, pixel.

Các tham số
ctxContext của engine.
levelLevel.
Giá trị trả về
Kích thước, hoặc {0, 0} nếu handle không hợp lệ.

◆ level_origin()

vec2 njin::level_origin ( const context & ctx,
level_handle level )

Góc trên trái của level trong thế giới.

Các tham số
ctxContext của engine.
levelLevel.
Giá trị trả về
Vị trí.

◆ level_properties()

const json_value & njin::level_properties ( const context & ctx,
level_handle level )

Thuộc tính tùy chỉnh của cả bản đồ (Tiled) hoặc của level (LDtk).

Các tham số
ctxContext của engine.
levelLevel.
Giá trị trả về
Object JSON, hoặc giá trị null nếu handle không hợp lệ.

◆ level_find()

entt::entity njin::level_find ( context & ctx,
level_handle level,
const char * name )

Tìm object đầu tiên của level có tên (hoặc, nếu không có tên nào khớp, lớp) là name.

Tiện cho điểm xuất hiện: level_find(ctx, lv, "spawn").

Các tham số
ctxContext của engine.
levelLevel.
nameTên hoặc lớp.
Giá trị trả về
Entity, hoặc entt::null.