Prefab là mẫu để tạo entity: một hàm dựng có tên, gắn component vào entity vừa tạo. Viết hàm dựng một lần, rồi spawn bao nhiêu lần cũng được, kể cả tìm theo tên.
njin::prefab_spawn() làm lần lượt:
Muốn khác đi một chút (máu nhiều hơn, màu khác) thì sửa trên entity trả về:
| Hàm | Việc làm |
|---|---|
| njin::prefab_register() | Đăng ký prefab. Tên đã có thì trả về cái cũ |
| njin::prefab_find() | Tìm theo tên |
| njin::prefab_spawn() | Tạo entity từ prefab (handle hoặc tên) |
| njin::prefab_spawn_child() | Tạo entity từ prefab và gắn làm con của entity khác |
Gắn njin::child_of vào một entity để nó đi theo entity cha: vũ khí trong tay, bánh xe, cái bóng dưới chân, emitter lửa ở đuôi tên lửa.
Mỗi frame, trong phase_post_update, module hierarchy của engine ghi đè transform của con bằng transform của cha kết hợp với local (xem njin::transform_combine()):
| Của con | Được tính |
|---|---|
| pos | cha.pos + xoay(local.pos × cha.scale, cha.rot) |
| rot | cha.rot + local.rot |
| scale | cha.scale × local.scale |
Vì vậy:
Lật hướng (sprite.flip_x) không tự lật con. Khi nhân vật quay trái, đổi dấu local.pos.x của vũ khí.