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
Scene

Chia game thành các màn: menu, đang chơi, game over. Tiếp...

Classes

struct  njin::scene_desc
 Mô tả một scene, dùng với scene_register(). Tiếp...
struct  njin::scene_transition
 Hiệu ứng chuyển scene, dùng với scene_fade(). Tiếp...

Các hàm

scene_handle njin::scene_register (context &ctx, const scene_desc &desc)
 Đăng ký một scene.
scene_handle njin::scene_find (const context &ctx, const char *name)
 Tìm scene theo tên.
void njin::scene_set (context &ctx, scene_handle scene)
 Chuyển sang một scene khác.
scene_handle njin::scene_current (const context &ctx)
 Scene đang chạy.
void njin::scene_fade (context &ctx, scene_handle scene, const scene_transition &transition={})
 Chuyển sang scene khác với hiệu ứng mờ dần (fade).
bool njin::scene_transitioning (const context &ctx)
 Có đang chuyển scene bằng scene_fade() không.
f32 njin::scene_transition_cover (const context &ctx)
 Độ phủ hiện tại của hiệu ứng chuyển scene.

Mô tả chi tiết

Chia game thành các màn: menu, đang chơi, game over.

Thông tin về hàm

◆ scene_register()

scene_handle njin::scene_register ( context & ctx,
const scene_desc & desc )

Đăng ký một scene.

Nếu tên đã có thì trả về scene cũ.

Dùng được ở mọi lúc, kể cả trong setup của module: đăng ký scene trước, rồi dùng handle trong njin::sys_desc để system chỉ chạy ở scene đó.

Các tham số
ctxContext của engine.
descMô tả scene.
Giá trị trả về
Handle của scene, hoặc handle id 0 nếu desc.name là null.

◆ scene_find()

scene_handle njin::scene_find ( const context & ctx,
const char * name )

Tìm scene theo tên.

Các tham số
ctxContext của engine.
nameTên scene.
Giá trị trả về
Handle của scene, hoặc handle id 0 nếu không có.

◆ scene_set()

void njin::scene_set ( context & ctx,
scene_handle scene )

Chuyển sang một scene khác.

Việc chuyển diễn ra ở đầu frame sau, không phải ngay lập tức, nên frame hiện tại chạy trọn vẹn. Khi chuyển, engine lần lượt:

  1. gọi on_exit của scene cũ,
  2. hủy mọi entity có njin::scene_owned trỏ tới scene cũ,
  3. gọi on_enter của scene mới.

Gọi nhiều lần trong một frame thì lần cuối thắng. Chuyển sang chính scene đang chạy thì không làm gì.

Các tham số
ctxContext của engine.
sceneScene đích.

◆ scene_current()

scene_handle njin::scene_current ( const context & ctx)

Scene đang chạy.

Các tham số
ctxContext của engine.
Giá trị trả về
Scene đang chạy, hoặc handle id 0 nếu chưa có.

◆ scene_fade()

void njin::scene_fade ( context & ctx,
scene_handle scene,
const scene_transition & transition = {} )

Chuyển sang scene khác với hiệu ứng mờ dần (fade).

Giống scene_set() nhưng việc đổi scene xảy ra khi màn hình đã phủ kín. Game vẫn chạy trong lúc chuyển: dùng scene_transitioning() để bỏ qua nhập liệu nếu cần.

Gọi lại khi đang chuyển thì chỉ đổi scene đích (và hiệu ứng), không bắt đầu lại từ đầu; nếu đang mở màn hình thì phủ lại từ độ phủ hiện tại. Gọi scene_set() khi đang chuyển thì hủy hiệu ứng và đổi scene ngay frame sau.

Các tham số
ctxContext của engine.
sceneScene đích.
transitionHiệu ứng.

◆ scene_transitioning()

bool njin::scene_transitioning ( const context & ctx)

Có đang chuyển scene bằng scene_fade() không.

Các tham số
ctxContext của engine.
Giá trị trả về
true từ lúc gọi scene_fade() đến khi màn hình mở hết.

◆ scene_transition_cover()

f32 njin::scene_transition_cover ( const context & ctx)

Độ phủ hiện tại của hiệu ứng chuyển scene.

Các tham số
ctxContext của engine.
Giá trị trả về
0 là không phủ, 1 là phủ kín.