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
Vòng đời engine

Tạo, chạy và hủy engine, cùng cấu hình cửa sổ. Tiếp...

Classes

struct  njin::config
 Cấu hình cửa sổ và vòng lặp, truyền vào create(). Tiếp...

Định nghĩa

#define NJIN_VERSION_MAJOR   0
 Số phiên bản của njin, theo semver: MAJOR.MINOR.PATCH.
#define NJIN_VERSION_MINOR   3
 Số MINOR: tăng khi thêm tính năng mới, vẫn tương thích trong nhánh.
#define NJIN_VERSION_PATCH   0
 Số PATCH: tăng khi chỉ sửa lỗi và bảo mật.
#define NJIN_VERSION   (NJIN_VERSION_MAJOR * 10000 + NJIN_VERSION_MINOR * 100 + NJIN_VERSION_PATCH)
 Số phiên bản dạng số để so sánh: MAJOR * 10000 + MINOR * 100 + PATCH.

Các hàm

context * njin::create (const config &cfg)
 Mở cửa sổ và trả về context của engine.
void njin::run (context &ctx)
 Chạy vòng lặp chính cho đến khi cửa sổ đóng.
void njin::destroy (context *ctx)
 Giải phóng mọi tài nguyên của engine và đóng cửa sổ.
f32 njin::fps (const context &ctx)
 Trả về FPS mục tiêu đã cấu hình (target_fps).
vec2 njin::screen_size (const context &ctx)
 Trả về kích thước màn hình mà game vẽ lên, tính bằng pixel.
const char * njin::version ()
 Phiên bản của engine đang chạy, dạng chuỗi "0.1.0".

Mô tả chi tiết

Tạo, chạy và hủy engine, cùng cấu hình cửa sổ.

Thông tin về định nghĩa

◆ NJIN_VERSION_MAJOR

#define NJIN_VERSION_MAJOR   0

Số phiên bản của njin, theo semver: MAJOR.MINOR.PATCH.

Đây là nguồn duy nhất của số phiên bản: CMake đọc chính các dòng #define này (xem CMakeLists.txt), log lúc khởi động và njin_inspector đều hiện số này. Khi phát hành, sửa ba số ở đây, ghi vào CHANGELOG.md, rồi đặt tag vMAJOR.MINOR.PATCH.

  • MAJOR: biến đổi lớn. Khi số này tăng, phần lõi của engine thay đổi và có thể không tương thích với các bản cũ: game viết cho API cũ có thể phải sửa.
  • MINOR: tính năng mới. Engine được bổ sung tính năng nhưng vẫn tương thích tốt với các bản cũ của cùng nhánh MAJOR: game hiện có vẫn build và chạy như trước.
  • PATCH: sửa lỗi. Chỉ vá lỗi và sửa bảo mật, không có tính năng mới.

Tăng một số thì các số bên phải về 0 (0.2.3 thành 0.3.0). Khi MAJOR còn là 0, API chưa ổn định nên bản MINOR vẫn có thể đổi API; CHANGELOG.md sẽ nói rõ khi có chuyện đó. Số MAJOR: tăng khi có biến đổi lớn, có thể không tương thích bản cũ.

◆ NJIN_VERSION

#define NJIN_VERSION   (NJIN_VERSION_MAJOR * 10000 + NJIN_VERSION_MINOR * 100 + NJIN_VERSION_PATCH)

Số phiên bản dạng số để so sánh: MAJOR * 10000 + MINOR * 100 + PATCH.

Ví dụ 0.1.0 là 100. Dùng #if NJIN_VERSION >= 200 để hỗ trợ nhiều bản engine.

Thông tin về hàm

◆ create()

context * njin::create ( const config & cfg)

Mở cửa sổ và trả về context của engine.

Không bao giờ trả về nullptr.

Module lõi của engine (camera) đã được đăng ký sẵn. Đăng ký module của game bằng mod_register() trước khi gọi run().

Các tham số
cfgCấu hình cửa sổ và vòng lặp.
Giá trị trả về
Context của engine. Không bao giờ là nullptr.

◆ run()

void njin::run ( context & ctx)

Chạy vòng lặp chính cho đến khi cửa sổ đóng.

Gọi các phase theo thứ tự của sys_phase. Gọi lần thứ hai bị bỏ qua.

Các tham số
ctxContext từ create().

◆ destroy()

void njin::destroy ( context * ctx)

Giải phóng mọi tài nguyên của engine và đóng cửa sổ.

nullptr bị bỏ qua.

Các tham số
ctxContext từ create(), hoặc nullptr.

◆ fps()

f32 njin::fps ( const context & ctx)

Trả về FPS mục tiêu đã cấu hình (target_fps).

Đây là giá trị cấu hình, không phải FPS đo được. Muốn thời gian của frame thì dùng delta().

Các tham số
ctxContext của engine.
Giá trị trả về
FPS mục tiêu.

◆ screen_size()

vec2 njin::screen_size ( const context & ctx)

Trả về kích thước màn hình mà game vẽ lên, tính bằng pixel.

Không có độ phân giải ảo thì đó là cửa sổ: lúc đầu bằng width, height đã cấu hình, và thay đổi khi người dùng kéo cửa sổ (nếu resizable) hoặc khi bật toàn màn hình. Có độ phân giải ảo (window_set_virtual_size()) thì đó là kích thước ảo, không đổi theo cửa sổ; cỡ thật của cửa sổ là window_size().

Các tham số
ctxContext của engine.
Giá trị trả về
Kích thước cửa sổ: x là rộng, y là cao.

◆ version()

const char * njin::version ( )

Phiên bản của engine đang chạy, dạng chuỗi "0.1.0".

Khác với các macro ở trên, hàm này cho biết bản của thư viện đã liên kết, không phải bản của header lúc biên dịch game: hai số khác nhau nghĩa là game và engine được build từ hai bản khác nhau.

Giá trị trả về
Chuỗi tĩnh.