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
Hiệu ứng (FX)

Rung camera, hitstop, nháy màn hình, nháy sprite và các mẫu particle có sẵn. Tiếp...

Namespaces

namespace  njin::fx
 Các mẫu particle hay dùng, để truyền vào particles_spawn() hoặc gắn thẳng lên entity.

Classes

struct  njin::shake_config
 Cách rung của camera_shake(). Tiếp...
struct  njin::flash_fx
 Tô một sprite thành một màu trong chốc lát, thường là trắng khi trúng đòn. Tiếp...
struct  njin::dissolve_fx
 Cho một sprite tan biến từng mảng nhỏ, có viền cháy sáng ở chỗ đang tan: kẻ địch chết, vật phẩm biến mất. Tiếp...

Hiệu ứng màn hình và thời gian

void njin::camera_shake (context &ctx, f32 trauma)
 Rung camera.
void njin::camera_shake_config (context &ctx, const shake_config &config)
 Đổi cách rung của camera_shake().
f32 njin::camera_shake_amount (const context &ctx)
 Độ rung hiện tại, 0..1.
void njin::hitstop (context &ctx, f32 seconds)
 Dừng hình trong chốc lát (hitstop, freeze frame) để cú đánh có "lực".
bool njin::hitstop_active (const context &ctx)
 Có đang hitstop không.
void njin::screen_flash (context &ctx, rgba color, f32 duration)
 Nháy cả màn hình một màu rồi mờ dần: trắng khi nổ lớn, đỏ khi bị thương.

Nháy sprite

void njin::sprite_flash (context &ctx, entt::entity entity, rgba color={1.0f, 1.0f, 1.0f, 1.0f}, f32 duration=0.1f)
 Nháy sprite của entity.

Tan biến sprite

void njin::sprite_dissolve (context &ctx, entt::entity entity, f32 duration=0.6f, rgba edge_color={1.0f, 0.55f, 0.1f, 1.0f})
 Cho sprite của entity tan biến.

Mô tả chi tiết

Rung camera, hitstop, nháy màn hình, nháy sprite và các mẫu particle có sẵn.

Thông tin về hàm

◆ camera_shake()

void njin::camera_shake ( context & ctx,
f32 trauma )

Rung camera.

Cộng dồn: trúng đạn liên tiếp rung mạnh dần.

Độ rung (0..1) giảm dần theo shake_config::decay. Cường độ thật tỉ lệ với bình phương độ rung, nên rung nhỏ gần như không thấy, rung lớn rất mạnh: 0.2 cho bước chân nặng, 0.4 cho trúng đòn, 0.7 trở lên cho vụ nổ. Chỉ ảnh hưởng hình vẽ ra, không đổi transform của camera hay w2scr()/scr2w(). Tính theo giờ thật, nên vẫn rung trong hitstop().

Các tham số
ctxContext của engine.
traumaĐộ rung cộng thêm, giới hạn tổng ở 1.

◆ camera_shake_config()

void njin::camera_shake_config ( context & ctx,
const shake_config & config )

Đổi cách rung của camera_shake().

Các tham số
ctxContext của engine.
configCách rung mới.

◆ camera_shake_amount()

f32 njin::camera_shake_amount ( const context & ctx)

Độ rung hiện tại, 0..1.

Các tham số
ctxContext của engine.
Giá trị trả về
Độ rung.

◆ hitstop()

void njin::hitstop ( context & ctx,
f32 seconds )

Dừng hình trong chốc lát (hitstop, freeze frame) để cú đánh có "lực".

Trong lúc dừng, delta() trả về 0 và phase_fixed_update không chạy, giống time_set_paused(), nhưng tự hết sau seconds giây thật. Gọi khi đang dừng thì lấy thời gian dài hơn, không cộng dồn. Thường 0.03 đến 0.12 giây.

Các tham số
ctxContext của engine.
secondsThời gian dừng, giây thật.

◆ hitstop_active()

bool njin::hitstop_active ( const context & ctx)

Có đang hitstop không.

Các tham số
ctxContext của engine.
Giá trị trả về
true nếu đang dừng hình.

◆ screen_flash()

void njin::screen_flash ( context & ctx,
rgba color,
f32 duration )

Nháy cả màn hình một màu rồi mờ dần: trắng khi nổ lớn, đỏ khi bị thương.

Vẽ đè lên mọi thứ, kể cả UI (nhưng dưới hiệu ứng chuyển scene). Tính theo giờ thật. Gọi lại khi đang nháy thì thay bằng lần nháy mới.

Các tham số
ctxContext của engine.
colorMàu nháy. color.a là độ đục lúc đầu.
durationThời gian mờ hết, giây.

◆ sprite_flash()

void njin::sprite_flash ( context & ctx,
entt::entity entity,
rgba color = {1.0f, 1.0f, 1.0f, 1.0f},
f32 duration = 0.1f )

Nháy sprite của entity.

Gọi lại khi đang nháy thì bắt đầu lại.

Các tham số
ctxContext của engine.
entityEntity có sprite.
colorMàu tô.
durationThời gian, giây (theo delta(), nên dừng trong hitstop).

◆ sprite_dissolve()

void njin::sprite_dissolve ( context & ctx,
entt::entity entity,
f32 duration = 0.6f,
rgba edge_color = {1.0f, 0.55f, 0.1f, 1.0f} )

Cho sprite của entity tan biến.

Gọi lại khi đang tan thì bắt đầu lại.

Muốn chỉnh thêm (hiện ra dần, cỡ mảng, hủy khi xong) thì tự gắn njin::dissolve_fx:

reg.emplace_or_replace<njin::dissolve_fx>(enemy, njin::dissolve_fx{.duration = 0.8f, .seed = 3.0f,
.destroy_when_done = true});
Cho một sprite tan biến từng mảng nhỏ, có viền cháy sáng ở chỗ đang tan: kẻ địch chết,...
Definition njin_fx.h:111
Các tham số
ctxContext của engine.
entityEntity có sprite.
durationThời gian, giây (theo delta(), nên dừng trong hitstop).
edge_colorMàu viền cháy. a bằng 0 là không có viền.