Cho camera bám theo một entity: mượt, có vùng chết, nhìn trước theo hướng chạy, và không bao giờ lộ ra ngoài khung level. Tiếp...
#include <njin_camera.h>
Các thuộc tính Public | |
| entt::entity | target = entt::null |
| Entity cần bám (có transform). null là đứng yên. | |
| vec2 | offset {} |
| Cộng vào vị trí mục tiêu: {0, -16} để nhìn cao hơn đầu nhân vật. | |
| vec2 | deadzone {} |
| Kích thước hình chữ nhật quanh tâm màn hình mà mục tiêu đi trong đó thì camera đứng yên. | |
| f32 | smoothing = 0.12f |
| Độ trễ, giây: mất khoảng chừng này để đi được 63% quãng đến vị trí mới. | |
| vec2 | lookahead {} |
| Nhìn trước theo hướng mục tiêu đang đi, từng trục: {48, 0} cho platformer (chỉ ngang), {32, 32} cho top-down. | |
| f32 | lookahead_smoothing = 0.5f |
| Độ trễ của phần nhìn trước, giây. Lớn hơn smoothing để quay đầu không giật. | |
| rect | bounds {} |
| Vùng thế giới mà khung nhìn không được vượt ra. | |
| bool | center = true |
| Giữ camera_2d::offset ở giữa màn hình (cả khi đổi cỡ cửa sổ hay độ phân giải ảo). | |
| bool | pixel_snap = false |
| Làm tròn vị trí camera theo pixel màn hình. | |
| vec2 | look {} |
| Phần nhìn trước hiện tại, engine ghi. | |
| vec2 | last_target {} |
| Vị trí mục tiêu ở frame trước, engine ghi. | |
| bool | started = false |
| Đã đặt vị trí lần đầu. | |
Cho camera bám theo một entity: mượt, có vùng chết, nhìn trước theo hướng chạy, và không bao giờ lộ ra ngoài khung level.
Gắn vào entity camera (cùng transform, njin::camera_2d, njin::camera_on). Module camera_follow của engine, trong phase_post_update (sau khi nhân vật đã di chuyển, trước khi tilemap được chuẩn bị để vẽ), dời transform.pos của camera.
Mọi khoảng cách là đơn vị thế giới (pixel của thế giới trước khi phóng). Rung màn hình của njin::fx không bị ảnh hưởng: nó được cộng vào khi vẽ.
| vec2 njin::camera_follow::deadzone {} |
Kích thước hình chữ nhật quanh tâm màn hình mà mục tiêu đi trong đó thì camera đứng yên.
{0, 0} là luôn bám.
| f32 njin::camera_follow::smoothing = 0.12f |
Độ trễ, giây: mất khoảng chừng này để đi được 63% quãng đến vị trí mới.
0 là bám chặt.
| rect njin::camera_follow::bounds {} |
Vùng thế giới mà khung nhìn không được vượt ra.
Kích thước 0 là không giới hạn. Level nhỏ hơn màn hình thì nằm giữa màn hình. Xem level_bounds().
| bool njin::camera_follow::center = true |
Giữ camera_2d::offset ở giữa màn hình (cả khi đổi cỡ cửa sổ hay độ phân giải ảo).
false để tự đặt offset.
| bool njin::camera_follow::pixel_snap = false |
Làm tròn vị trí camera theo pixel màn hình.
Bật cho pixel art để các ô không bị rung một pixel khi camera trôi chậm.
| bool njin::camera_follow::started = false |
Đã đặt vị trí lần đầu.
Đặt lại false để camera nhảy thẳng tới mục tiêu, ví dụ sau khi nhân vật dịch chuyển.