njin là một engine game nhỏ viết bằng C++20, làm cả game 2D lẫn 3D. Nó dùng EnTT cho ECS và raylib cho cửa sổ, đồ họa, nhập liệu. raylib được giấu hoàn toàn: game chỉ include njin.h và không bao giờ thấy raylib.
Phần lớn API (module, system, ECS, nhập liệu, thời gian, âm thanh, UI, particle/hiệu ứng, debug) dùng chung cho 2D và 3D. Vẽ hình, sprite, tilemap, camera và va chạm ở Phần 2–4 là 2D (njin_draw.h, njin_camera.h, njin_collision.h...); Đồ họa 3D là trang 3D riêng (njin_3d.h): camera phối cảnh, hình khối và SDF, model glTF, ánh sáng có bóng đổ, instancing. Một game chỉ dùng phần nào mình cần; hai phần dựng trên cùng ECS và cùng vòng lặp nên trộn được (ví dụ HUD 2D vẽ đè lên cảnh 3D).
Trang này là tài liệu để dùng njin và để hiểu nó.
Mã nguồn: https://github.com/tptindev/njin. Báo lỗi và góp ý ở mục Issues của repo. Lịch sử phiên bản nằm trong CHANGELOG.md ở thư mục gốc.
Chưa quen C, C++, CMake hay shader? Đọc nhóm 13 bài Kiến thức nền: học trước khi làm game trước (bỏ qua nếu đã biết). Rồi đi theo thứ tự này:
Các trang xếp theo độ khó tăng dần: đi từ Phần 1 xuống Phần 7, hoặc nhảy thẳng tới phần bạn cần. Thanh bên trái cũng hiện đúng cây này. Cột Phạm vi nói API của phần đó dùng cho loại game nào: "Chung" chạy được với cả game 2D lẫn 3D (module, ECS, nhập liệu, âm thanh, UI, đóng gói...); "2D" là vẽ hình, sprite, tilemap, camera và va chạm 2D; "3D" chỉ Đồ họa 3D, trang riêng cho njin_3d.h trong Phần 7.
| Phần | Mức | Phạm vi | Bạn được gì |
|---|---|---|---|
| Phần 1: Bắt đầu | Người mới | Chung | Cài môi trường, chạy chương trình đầu tiên, có ngay một nhân vật chạy được. Kèm 13 bài nền về C, C++, CMake, shader |
| Phần 2: Khái niệm cốt lõi | Cơ bản | Chung | Hiểu module, system, một frame chạy thế nào, entity và component, nhập liệu, thời gian, toán, log |
| Phần 3: Hình ảnh và chuyển động | Cơ bản | 2D | Vẽ hình và chữ, sprite, animation, camera, particle, pixel art |
| Phần 4: Thế giới và gameplay | Trung cấp | 2D | Bản đồ ô vuông, Tiled và LDtk, va chạm, prefab; ghép lại thành game platformer và top-down |
| Phần 5: Âm thanh và giao diện | Trung cấp | Chung | Tiếng động và nhạc, menu, hộp thoại, đa ngôn ngữ |
| Phần 6: Hoàn thiện và phát hành | Trung cấp | Chung | Chia màn chơi, lưu game, cài đặt của người chơi, cửa sổ, đọc game mẫu, đóng gói |
| Phần 7: Nâng cao | Nâng cao | 2D + 3D | Shader, instancing, hậu kỳ, sinh bản đồ tự động, Đồ họa 3D (3D), debug bằng inspector |
Sau bảy phần có Phụ lục , gồm bảng tra nhanh "muốn làm X thì dùng gì", tra cứu từng hàm theo nhóm API, và kiến trúc bên trong engine.
Hàm run chạy vòng lặp đến khi cửa sổ đóng. Mọi logic của game nằm trong module, xem Module, system và phase.
src/games/pong là một game Pong đầy đủ viết trên njin: menu, chơi với máy hoặc hai người, tạm dừng, slow motion ở điểm quyết định, âm thanh tự sinh, lưu kỷ lục, cửa sổ đổi kích thước được. Đọc từ trên xuống như một chuyến tham quan engine. Build target njin_pong rồi chạy build\bin\njin_pong.exe.