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
Kiến thức nền: học trước khi làm game

Muốn làm game với njin thì cần đọc được C++, biết CMake dựng ra chương trình, và hiểu shader là gì. Nhóm 13 bài này dạy đúng những phần đó, từ con số không, theo một mạch duy nhất. Không cần chọn "mức" nào: bạn bắt đầu ở bài đầu, và bài nào đã biết thì bỏ qua.

Mọi thứ trong đây đúc kết từ chính njin: các ví dụ lấy hình dạng từ code của engine (handle, context &, CMake của repo, shader hậu kỳ), cộng những pattern game nào cũng gặp. Không bài nào cần njin: chỉ cần trình biên dịch, và CMake ở phần cuối. Cài chúng theo Cài môi trường.

Cách học

  • Mỗi bài mở đầu bằng "Bài này dạy gì" và "Cần biết trước", và kết thúc bằng Tự kiểm tra (câu hỏi), Bài tập và Đáp án. Làm bài tập trước khi xem đáp án.
  • Mọi ví dụ đã được biên dịch và chạy thật, kết quả in trong bài là kết quả thật. Trang nào chưa thử được thứ gì (một trình biên dịch, một hệ điều hành) thì nói rõ.
  • Gõ lại và sửa các ví dụ thay vì chỉ đọc. Lỗi bạn tự gây ra và tự sửa được dạy nhiều hơn ví dụ chạy đúng.

13 bài

C: nền tảng của mọi thứ (raylib viết bằng C, và API của njin vẫn giữ dáng C ở const char * và printf)

Bài Nội dung
Bài 1: Chương trình C đầu tiên Viết, biên dịch, chạy một chương trình C: kiểu dữ liệu, printf, vòng lặp, hàm
Bài 2: Bộ nhớ, con trỏ và chuỗi Con trỏ, mảng, struct, chuỗi C, stack và heap, năm lỗi bộ nhớ kinh điển và cách bắt chúng
Bài 3: Nhiều file, preprocessor và liên kết Nhiều file, header, preprocessor, bốn giai đoạn từ code tới file chạy, lỗi undefined reference

C++: phần njin dùng hằng ngày

Bài Nội dung
Bài 4: C++ hơn C ở những gì Tham chiếu, const, namespace, std::string, std::vector, struct có hàm, nạp chồng, tham số mặc định
Bài 5: Giá trị, tham chiếu và quyền sở hữu Giá trị và tham chiếu, sao chép và di chuyển, RAII, quyền sở hữu, và vì sao njin dùng handle và context &
Bài 6: C++ hiện đại trong code njin auto, structured binding, lambda, khởi tạo chỉ định, initializer_list, constexpr, enum class, template để dùng
Bài 7: Đọc lỗi biên dịch và lỗi liên kết Đọc lỗi biên dịch, lỗi liên kết và lỗi lúc chạy, và quy trình gỡ lỗi với -Wall, printf, gdb

CMake: dựng và quản lý dự án

Bài Nội dung
Bài 8: CMake cơ bản CMakeLists.txt cho chương trình và thư viện, PRIVATE/PUBLIC/INTERFACE, kiểu build, bộ nhớ đệm (cache)
Bài 9: CMake cho dự án thật FetchContent, preset, nhiều thư mục, sao chép assets, và một cửa sổ raylib dựng bằng CMake

Shader: chương trình chạy trên GPU

Bài Nội dung
Bài 10: Shader: làm quen với GLSL Shader là gì, GLSL đủ dùng, một "sân chơi" raylib để viết và sửa fragment shader
Bài 11: SDF: vẽ hình bằng khoảng cách SDF: vẽ hình bằng khoảng cách. Hình tròn, hộp, ghép hình, quầng sáng, bóng đổ, thanh máu không cần ảnh
Bài 12: Các mẫu shader hay gặp Viền tối, sọc CRT, làm mờ, nháy trắng, đổi bảng màu, tan biến, viền, pixel art sắc nét, sóng gợn

Pattern của game

Bài Nội dung
Bài 13: Các pattern của game Bước vật lý cố định, ECS, máy trạng thái, hẹn giờ, event, action thay cho phím

Bỏ qua được gì

Không phải mọi người cần đọc hết. Nếu bạn đã biết:

Đã thử những gì

Trang nào cũng nói rõ chuyện này, nhưng tóm lại: mọi ví dụ được chạy trên Windows với GCC 15.2. Các trình dò lỗi bộ nhớ (AddressSanitizer) chạy trong Ubuntu (WSL) vì GCC của Windows ở đây không có. Shader chạy thật trên một card Intel Iris Xe; thông báo lỗi biên dịch shader do driver viết nên sẽ khác chữ trên card khác. MSVC, Clang và macOS chưa thử.

Sau các bài này

Bạn đủ nền để bắt đầu njin:

  1. Cài môi trường : cài môi trường
  2. Bắt đầu : chương trình njin đầu tiên
  3. Nhân vật nhảy được trong 50 dòng (platformer) hoặc Nhân vật đi 8 hướng trong 50 dòng (top-down) : một nhân vật chạy được trong 50 dòng
  4. Muốn làm X thì dùng gì : tra "muốn làm X thì dùng hàm nào"