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
Animation

Sprite sheet có clip, nạp từ Aseprite, máy trạng thái animation. Tiếp...

Classes

struct  njin::anim_clip_desc
 Mô tả một clip (một đoạn animation có tên) trong sprite sheet, dùng với anim_sheet_add_clip(). Tiếp...
struct  njin::anim_cond
 Một điều kiện của chuyển trạng thái. Tiếp...
struct  njin::anim_state_desc
 Một trạng thái của máy trạng thái: một clip được chạy khi ở trạng thái đó. Tiếp...
struct  njin::anim_transition_desc
 Một chuyển trạng thái: từ from sang to khi mọi điều kiện đúng. Tiếp...
struct  njin::anim_graph_desc
 Mô tả một máy trạng thái animation, dùng với anim_graph_create(). Tiếp...
struct  njin::animator
 Chạy animation từ một sheet có clip, cho entity có sprite. Tiếp...

Enumerations

enum  njin::anim_direction { njin::anim_forward , njin::anim_reverse , njin::anim_ping_pong , njin::anim_ping_pong_reverse }
 Thứ tự chạy các frame của một clip, giống tùy chọn "Animation Direction" của tag trong Aseprite. Tiếp...
enum  njin::anim_cmp {
  njin::anim_gt , njin::anim_lt , njin::anim_ge , njin::anim_le ,
  njin::anim_eq , njin::anim_ne , njin::anim_true , njin::anim_false ,
  njin::anim_trigger
}
 Phép so sánh của một điều kiện chuyển trạng thái. Tiếp...

Các hàm

anim_sheet_handle njin::anim_sheet_load (context &ctx, const char *json_path)
 Nạp sprite sheet và các clip từ file JSON do Aseprite xuất ra.
anim_sheet_handle njin::anim_sheet_grid (context &ctx, texture_handle texture, vec2 frame_size, f32 fps)
 Tạo sprite sheet từ một ảnh chia lưới đều, không có clip nào.
bool njin::anim_sheet_add_clip (context &ctx, anim_sheet_handle sheet, const anim_clip_desc &desc)
 Thêm một clip vào sheet.
void njin::anim_sheet_unload (context &ctx, anim_sheet_handle sheet)
 Giải phóng sheet, và ảnh của nó nếu sheet nạp từ Aseprite.
i32 njin::anim_clip_find (const context &ctx, anim_sheet_handle sheet, const char *name)
 Tìm clip theo tên.
f32 njin::anim_clip_duration (const context &ctx, anim_sheet_handle sheet, const char *name)
 Thời lượng một lượt chạy của clip, giây.
anim_graph_handle njin::anim_graph_create (context &ctx, const anim_graph_desc &desc)
 Tạo một máy trạng thái animation.
bool njin::animator_play (const context &ctx, animator &anim, const char *name, bool restart=false)
 Chuyển ngay sang một clip (không graph) hoặc một trạng thái (có graph).
void njin::animator_set (const context &ctx, animator &anim, const char *param, f32 value)
 Đặt một tham số số của graph, ví dụ tốc độ chạy.
void njin::animator_set_bool (const context &ctx, animator &anim, const char *param, bool value)
 Đặt một tham số bool của graph, ví dụ đang đứng trên đất.
void njin::animator_trigger (const context &ctx, animator &anim, const char *param)
 Bật một trigger của graph cho frame này, ví dụ vừa bấm nút đánh.
bool njin::animator_in (const context &ctx, const animator &anim, const char *name)
 Đang ở trạng thái (có graph) hoặc clip (không graph) này không.
const char * njin::animator_current (const context &ctx, const animator &anim)
 Tên trạng thái (có graph) hoặc clip (không graph) hiện tại.

Các biến

constexpr i32 njin::anim_max_params = 16
 Số tham số tối đa của một máy trạng thái.

Mô tả chi tiết

Sprite sheet có clip, nạp từ Aseprite, máy trạng thái animation.

Thông tin về Enumeration Type

◆ anim_direction

Thứ tự chạy các frame của một clip, giống tùy chọn "Animation Direction" của tag trong Aseprite.

Enumerator
anim_forward 

Từ frame đầu đến frame cuối.

anim_reverse 

Từ frame cuối về frame đầu.

anim_ping_pong 

Đi rồi về: 0 1 2 3 2 1, rồi lặp.

anim_ping_pong_reverse 

Về rồi đi: 3 2 1 0 1 2, rồi lặp.

◆ anim_cmp

Phép so sánh của một điều kiện chuyển trạng thái.

Enumerator
anim_gt 

Tham số lớn hơn value.

anim_lt 

Tham số nhỏ hơn value.

anim_ge 

Tham số lớn hơn hoặc bằng value.

anim_le 

Tham số nhỏ hơn hoặc bằng value.

anim_eq 

Tham số bằng value.

anim_ne 

Tham số khác value.

anim_true 

Tham số khác 0 (bool đang bật).

anim_false 

Tham số bằng 0 (bool đang tắt).

anim_trigger 

Tham số được bật bằng animator_trigger() trong frame này.

Bị tiêu thụ khi chuyển trạng thái, và tự tắt cuối frame nếu không dùng đến.

Thông tin về hàm

◆ anim_sheet_load()

anim_sheet_handle njin::anim_sheet_load ( context & ctx,
const char * json_path )

Nạp sprite sheet và các clip từ file JSON do Aseprite xuất ra.

Trong Aseprite: File > Export Sprite Sheet, tab Output bật JSON Data và Tags (chọn "Array" hoặc "Hash" đều được), tab Borders tắt Trim. Hoặc dòng lệnh:

aseprite -b player.aseprite --sheet player.png --data player.json --list-tags --format json-array

Mỗi tag thành một clip cùng tên, giữ hướng chạy và số lần lặp của tag. Thời lượng từng frame lấy đúng như trong Aseprite. Không có tag nào thì có một clip tên "default" gồm mọi frame. Ảnh (meta.image) được tìm cạnh file JSON và thuộc về sheet: unload sheet thì ảnh cũng được giải phóng.

Các tham số
ctxContext của engine.
json_pathĐường dẫn file JSON.
Giá trị trả về
Handle của sheet, hoặc handle id 0 nếu file thiếu hoặc lỗi (có ghi log).

◆ anim_sheet_grid()

anim_sheet_handle njin::anim_sheet_grid ( context & ctx,
texture_handle texture,
vec2 frame_size,
f32 fps )

Tạo sprite sheet từ một ảnh chia lưới đều, không có clip nào.

Frame xếp theo hàng từ trái sang phải rồi từ trên xuống, đánh số từ 0, như njin::sprite_anim. Thêm clip bằng anim_sheet_add_clip(). Ảnh không thuộc về sheet: game tự unload nó.

Các tham số
ctxContext của engine.
textureẢnh sprite sheet.
frame_sizeKích thước một frame, pixel.
fpsSố frame mỗi giây, dùng cho mọi frame.
Giá trị trả về
Handle của sheet, hoặc handle id 0 nếu ảnh hoặc kích thước không hợp lệ.

◆ anim_sheet_add_clip()

bool njin::anim_sheet_add_clip ( context & ctx,
anim_sheet_handle sheet,
const anim_clip_desc & desc )

Thêm một clip vào sheet.

Các tham số
ctxContext của engine.
sheetSheet.
descMô tả clip.
Giá trị trả về
false nếu sheet không hợp lệ, trùng tên, hoặc frame ngoài sheet.

◆ anim_sheet_unload()

void njin::anim_sheet_unload ( context & ctx,
anim_sheet_handle sheet )

Giải phóng sheet, và ảnh của nó nếu sheet nạp từ Aseprite.

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

◆ anim_clip_find()

i32 njin::anim_clip_find ( const context & ctx,
anim_sheet_handle sheet,
const char * name )

Tìm clip theo tên.

Các tham số
ctxContext của engine.
sheetSheet.
nameTên clip.
Giá trị trả về
Số thứ tự của clip, hoặc -1 nếu không có.

◆ anim_clip_duration()

f32 njin::anim_clip_duration ( const context & ctx,
anim_sheet_handle sheet,
const char * name )

Thời lượng một lượt chạy của clip, giây.

Dùng để canh thời gian của đòn đánh hay hiệu ứng theo animation.

Các tham số
ctxContext của engine.
sheetSheet.
nameTên clip.
Giá trị trả về
Tổng thời lượng các frame, hoặc 0 nếu không có clip.

◆ anim_graph_create()

anim_graph_handle njin::anim_graph_create ( context & ctx,
const anim_graph_desc & desc )

Tạo một máy trạng thái animation.

Nhiều entity dùng chung một graph, mỗi entity có trạng thái và tham số riêng trong njin::animator.

Các tham số
ctxContext của engine.
descMô tả graph.
Giá trị trả về
Handle của graph, hoặc handle id 0 nếu có tên clip hoặc trạng thái không tồn tại, hay quá anim_max_params tham số (có ghi log).

◆ animator_play()

bool njin::animator_play ( const context & ctx,
animator & anim,
const char * name,
bool restart = false )

Chuyển ngay sang một clip (không graph) hoặc một trạng thái (có graph).

Nếu đang chạy đúng nó và chưa hết thì không làm gì, nên gọi mỗi frame được. Với graph, các chuyển trạng thái vẫn được xét từ frame sau.

Các tham số
ctxContext của engine.
animAnimator.
nameTên clip, hoặc tên trạng thái nếu có graph.
restartBắt đầu lại kể cả khi đang chạy đúng nó.
Giá trị trả về
false nếu không tìm thấy tên.

◆ animator_set()

void njin::animator_set ( const context & ctx,
animator & anim,
const char * param,
f32 value )

Đặt một tham số số của graph, ví dụ tốc độ chạy.

Các tham số
ctxContext của engine.
animAnimator.
paramTên tham số (tên dùng trong anim_cond).
valueGiá trị.

◆ animator_set_bool()

void njin::animator_set_bool ( const context & ctx,
animator & anim,
const char * param,
bool value )

Đặt một tham số bool của graph, ví dụ đang đứng trên đất.

Các tham số
ctxContext của engine.
animAnimator.
paramTên tham số.
valueGiá trị.

◆ animator_trigger()

void njin::animator_trigger ( const context & ctx,
animator & anim,
const char * param )

Bật một trigger của graph cho frame này, ví dụ vừa bấm nút đánh.

Các tham số
ctxContext của engine.
animAnimator.
paramTên tham số (dùng với anim_trigger).

◆ animator_in()

bool njin::animator_in ( const context & ctx,
const animator & anim,
const char * name )

Đang ở trạng thái (có graph) hoặc clip (không graph) này không.

Các tham số
ctxContext của engine.
animAnimator.
nameTên trạng thái hoặc clip.
Giá trị trả về
true nếu đúng.

◆ animator_current()

const char * njin::animator_current ( const context & ctx,
const animator & anim )

Tên trạng thái (có graph) hoặc clip (không graph) hiện tại.

Các tham số
ctxContext của engine.
animAnimator.
Giá trị trả về
Tên, hoặc chuỗi rỗng nếu chưa có. Không bao giờ null.