Ngoài tiêu đề, kích thước, FPS và màu nền, njin::config có:
| Trường | Mặc định | Ý nghĩa |
|---|---|---|
| fixed_hz | 60 | Số nhịp phase_fixed_update mỗi giây |
| exit_key | key_escape | Phím đóng game ngay. Đặt key_none khi cần Esc cho menu |
| resizable | false | Cho phép kéo đổi kích thước cửa sổ |
| app_name | tiêu đề | Tên thư mục lưu game |
| vsync | false | Đồng bộ dọc: mỗi frame chờ màn hình làm tươi, không xé hình, CPU và GPU nghỉ giữa các frame. target_fps vẫn là mức trần thêm |
| Hàm | Việc làm |
|---|---|
| njin::screen_size() | Kích thước hiện tại của cửa sổ |
| njin::window_resized() | Cửa sổ vừa đổi kích thước ở frame này |
| njin::window_set_fullscreen() / njin::window_fullscreen() | Toàn màn hình dạng cửa sổ không viền |
| njin::window_set_vsync() / njin::window_vsync() | Bật tắt đồng bộ dọc lúc đang chạy; được lưu trong cài đặt |
| njin::window_set_size(), njin::window_set_title() | Đổi kích thước, tiêu đề |
| njin::cursor_set_visible() | Ẩn hiện con trỏ chuột |
| njin::cursor_set_locked() | Khóa con trỏ trong cửa sổ; đọc njin::mouse_delta() |
| njin::quit() | Thoát ở cuối frame. phase_shutdown vẫn chạy |
| njin::window_set_close_intercept(), njin::window_close_requested() | Nút [x] không thoát ngay mà báo cho game; game tự dọn rồi gọi njin::quit() |
Giữ màn chơi vừa mọi kích thước cửa sổ. Thiết kế game theo một kích thước cố định, rồi mỗi frame đặt zoom của camera cho vừa cửa sổ:
njin::screenshot() lưu ảnh của frame hiện tại ra file:
Mọi hàm nạp (texture, shader, font, sound, music) tìm file theo thứ tự:
Nhờ bước 2, game chạy bằng cách nhấp đúp file exe (thư mục làm việc khác) vẫn tìm thấy assets/ đặt cạnh exe.
Đặt tài nguyên của game vào một thư mục cạnh CMakeLists.txt của game, rồi gọi njin_add_assets() (khai báo trong cmake/njin.cmake):
Mỗi lần build my_game, thư mục được copy cạnh exe, chỉ những file đã đổi, nên sửa một ảnh rồi build lại là đủ. Trong code, luôn dùng đường dẫn tương đối như "assets/player.png". Cả thư mục build/bin khi đó chạy được ở bất cứ đâu, gửi cho người khác cũng được.
File đã xóa khỏi thư mục gốc không bị xóa khỏi bản copy; xóa build/bin/assets để làm sạch. Nhiều game trong cùng build/bin thì đặt tên thư mục khác nhau (ví dụ njin_add_assets(pong pong_assets)) để không đè lên nhau.
njin::save_path() cho biết nơi lưu. Để lưu nhiều giá trị có cấu trúc (màn chơi, túi đồ, cài đặt), dùng JSON: njin::json_save() và njin::json_load(), xem JSON và lưu game.
| Hàm | Việc làm |
|---|---|
| njin::file_exists() | File có tồn tại không |
| njin::file_read() | Đọc toàn bộ file vào một chuỗi |
| njin::file_write() | Ghi toàn bộ file, tạo thư mục cha nếu cần |
| njin::save_path() | Đường dẫn file lưu game trong thư mục của người dùng |
njin::file_write() ghi vào một file tạm rồi đổi tên, nên game tắt giữa chừng cũng không làm hỏng file cũ.
njin::save_path() trả về đường dẫn trong thư mục riêng của người dùng, tạo thư mục nếu chưa có:
| Hệ điều hành | Thư mục |
|---|---|
| Windows | APPDATA%\<app_name> |
| macOS | ~/Library/Application Support/<app_name> |
| Linux | ~/.local/share/<app_name> |
Mọi đường dẫn là UTF-8, nên tên file và thư mục có dấu tiếng Việt vẫn đúng.