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
njin::camera_follow Struct Tham chiế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. 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.

Mô tả chi tiết

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.

const entt::entity cam = njin::camera_spawn(ctx, 3.0f);
.target = player,
.deadzone = {24, 32},
.lookahead = {40, 0},
.bounds = njin::level_bounds(ctx, level)});
rect level_bounds(const context &ctx, level_handle level)
Khung của một level trong thế giới, dùng cho camera_follow::bounds.
entt::entity camera_spawn(context &ctx, f32 zoom=1.0f, vec2 pos={})
Tạo một entity camera đang dùng (transform, njin::camera_2d, njin::camera_on) nhìn vào pos,...
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ộ r...
Definition njin_camera.h:31

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ẽ.

Thông tin về Member Data

◆ deadzone

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.

◆ smoothing

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.

◆ bounds

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().

◆ center

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.

◆ pixel_snap

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.

◆ started

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.