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
njin::tilemap Struct Tham chiếu

Lưới ô vuông không giới hạn kích thước, vẽ từ một tileset, chia thành chunk. Tiếp...

#include <_tilemap.h>

Các thuộc tính Public

texture_handle tileset {}
 Ảnh tileset.
vec2 tile_size {16.0f, 16.0f}
 Kích thước một ô, tính bằng pixel.
f32 margin = 0.0f
 Khoảng từ mép ảnh tileset đến ô đầu tiên, pixel.
f32 spacing = 0.0f
 Khoảng giữa hai ô liền nhau trong ảnh tileset, pixel.
i32 layer = 0
 Lớp vẽ, cùng thang với sprite::layer.
rgba tint {1.0f, 1.0f, 1.0f, 1.0f}
 Màu nhân vào mọi ô.
bool visible = true
 Ẩn khi vẽ.
std::unordered_map< u64, tile_chunk > chunks
 Các chunk có ô, theo khóa từ tile_chunk_key().
u32 revision = 0
 Tăng mỗi lần có ô đổi.
std::vector< u8 > shapes
 Hình va chạm theo số thứ tự ô: shapes[id].
std::unordered_map< i32, tile_anim > anims
 Animation theo số thứ tự ô gốc. Đặt bằng tilemap_animate().

Mô tả chi tiết

Lưới ô vuông không giới hạn kích thước, vẽ từ một tileset, chia thành chunk.

Cần một transform trên cùng entity: transform.pos là góc trên trái của ô (0, 0) trong thế giới. Góc xoay và tỉ lệ bị bỏ qua.

Tileset là một ảnh gồm các ô cùng kích thước tile_size, đánh số từ 0 theo hàng từ trái sang phải rồi từ trên xuống, có thể cách mép ảnh margin và cách nhau spacing pixel (như tileset của Tiled và LDtk). Mỗi ô của lưới giữ số thứ tự ô trong tileset, hoặc -1 là ô trống. Cộng thêm njin::tile_flip_x hoặc njin::tile_flip_y để lật ô khi vẽ; đọc số thứ tự bằng tile_id().

Chunking. Ô được lưu theo khối 32 x 32 (njin::tile_chunk). Module sprite của engine vẽ sẵn mỗi chunk vào một ảnh riêng và chỉ vẽ lại chunk có ô vừa đổi, nên một bản đồ lớn chỉ tốn vài lệnh vẽ mỗi frame. Chỉ chunk nằm trong khung nhìn của camera mới được vẽ, và ảnh của chunk khuất lâu sẽ được giải phóng.

Luôn đổi ô bằng tilemap_set() để engine biết chunk nào cần vẽ lại.

Thông tin về Member Data

◆ visible

bool njin::tilemap::visible = true

Ẩn khi vẽ.

Vẫn dùng được cho va chạm.

◆ shapes

std::vector<u8> njin::tilemap::shapes

Hình va chạm theo số thứ tự ô: shapes[id].

Ô ngoài danh sách là tile_solid. Đặt bằng tilemap_set_shape().