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
Vẽ hình

Hình chữ nhật, hình tròn, đường thẳng, tam giác; cách trộn màu và cắt vùng vẽ. Tiếp...

Enumerations

enum  njin::blend_mode { njin::blend_alpha , njin::blend_additive , njin::blend_multiply }
 Cách trộn màu của những gì vẽ sau blend_begin(). Tiếp...

Các hàm

void njin::draw_rect (const context &ctx, rect r, rgba color)
 Vẽ hình chữ nhật đặc.
void njin::draw_rect_lines (const context &ctx, rect r, f32 thickness, rgba color)
 Vẽ viền hình chữ nhật.
void njin::draw_rect_rotated (const context &ctx, vec2 center, vec2 size, f32 rotation, rgba color)
 Vẽ hình chữ nhật đặc xoay quanh tâm của nó.
void njin::draw_circle (const context &ctx, vec2 center, f32 radius, rgba color)
 Vẽ hình tròn đặc.
void njin::draw_circle_lines (const context &ctx, vec2 center, f32 radius, f32 thickness, rgba color)
 Vẽ viền hình tròn.
void njin::draw_line (const context &ctx, vec2 a, vec2 b, f32 thickness, rgba color)
 Vẽ đoạn thẳng.
void njin::draw_triangle (const context &ctx, vec2 a, vec2 b, vec2 c, rgba color)
 Vẽ tam giác đặc.
void njin::draw_offset_push (const context &ctx, vec2 offset, f32 scale=1.0f)
 Phóng mọi hình vẽ sau đó theo scale rồi dời đi offset (đơn vị thế giới) cho tới draw_offset_pop(): điểm p được vẽ ở p * scale + offset.
void njin::draw_offset_pop (const context &ctx)
 Bỏ độ dời của lần draw_offset_push() gần nhất.
void njin::blend_begin (const context &ctx, blend_mode mode)
 Đổi cách trộn màu cho mọi thứ vẽ sau đó, cho đến blend_end().
void njin::draw_set_y_sort (context &ctx, i32 layer, bool on)
 Bật sắp xếp theo Y cho một lớp vẽ: trong lớp đó, sprite và particle có y lớn hơn (thấp hơn trên màn hình) được vẽ sau, nên đè lên thứ đứng phía sau nó.
void njin::blend_end (const context &ctx)
 Trở lại cách trộn mặc định.
void njin::clip_begin (const context &ctx, rect area)
 Chỉ vẽ bên trong một vùng của màn hình, cho đến clip_end().
void njin::clip_end (const context &ctx)
 Bỏ giới hạn vùng vẽ.

Mô tả chi tiết

Hình chữ nhật, hình tròn, đường thẳng, tam giác; cách trộn màu và cắt vùng vẽ.

Thông tin về Enumeration Type

◆ blend_mode

Cách trộn màu của những gì vẽ sau blend_begin().

Enumerator
blend_alpha 

Trộn theo độ trong suốt. Mặc định.

blend_additive 

Cộng màu: sáng lên. Dùng cho lửa, ánh sáng, tia lửa.

blend_multiply 

Nhân màu: tối đi. Dùng cho bóng đổ, lớp phủ màu.

Thông tin về hàm

◆ draw_rect()

void njin::draw_rect ( const context & ctx,
rect r,
rgba color )

Vẽ hình chữ nhật đặc.

Mọi hàm vẽ phải gọi giữa lúc bắt đầu và kết thúc vẽ của frame, tức là trong phase_pre_render, phase_render hoặc phase_post_render. Không gian (thế giới hay màn hình) phụ thuộc phase: xem trang Vòng lặp game.

Các tham số
ctxContext của engine.
rHình chữ nhật.
colorMàu.

◆ draw_rect_lines()

void njin::draw_rect_lines ( const context & ctx,
rect r,
f32 thickness,
rgba color )

Vẽ viền hình chữ nhật.

Viền nằm bên trong r.

Các tham số
ctxContext của engine.
rHình chữ nhật.
thicknessĐộ dày viền.
colorMàu.

◆ draw_rect_rotated()

void njin::draw_rect_rotated ( const context & ctx,
vec2 center,
vec2 size,
f32 rotation,
rgba color )

Vẽ hình chữ nhật đặc xoay quanh tâm của nó.

Các tham số
ctxContext của engine.
centerTâm.
sizeKích thước.
rotationGóc xoay tính bằng độ, theo chiều kim đồng hồ.
colorMàu.

◆ draw_circle()

void njin::draw_circle ( const context & ctx,
vec2 center,
f32 radius,
rgba color )

Vẽ hình tròn đặc.

Các tham số
ctxContext của engine.
centerTâm.
radiusBán kính.
colorMàu.

◆ draw_circle_lines()

void njin::draw_circle_lines ( const context & ctx,
vec2 center,
f32 radius,
f32 thickness,
rgba color )

Vẽ viền hình tròn.

Viền nằm bên trong bán kính.

Các tham số
ctxContext của engine.
centerTâm.
radiusBán kính.
thicknessĐộ dày viền.
colorMàu.

◆ draw_line()

void njin::draw_line ( const context & ctx,
vec2 a,
vec2 b,
f32 thickness,
rgba color )

Vẽ đoạn thẳng.

Các tham số
ctxContext của engine.
aĐiểm đầu.
bĐiểm cuối.
thicknessĐộ dày.
colorMàu.

◆ draw_triangle()

void njin::draw_triangle ( const context & ctx,
vec2 a,
vec2 b,
vec2 c,
rgba color )

Vẽ tam giác đặc.

Thứ tự ba đỉnh không quan trọng.

Các tham số
ctxContext của engine.
aĐỉnh thứ nhất.
bĐỉnh thứ hai.
cĐỉnh thứ ba.
colorMàu.

◆ draw_offset_push()

void njin::draw_offset_push ( const context & ctx,
vec2 offset,
f32 scale = 1.0f )

Phóng mọi hình vẽ sau đó theo scale rồi dời đi offset (đơn vị thế giới) cho tới draw_offset_pop(): điểm p được vẽ ở p * scale + offset.

Dùng để vẽ một phần của thế giới có tọa độ riêng (một khu bản đồ được sinh riêng) đúng chỗ của nó, hoặc vẽ nó thu nhỏ vào một render texture rồi vẽ texture đó phóng to lại. Lồng được; mỗi lần push cần một lần pop trong cùng phase. Chữ pixel (draw_text với font pixel) không bị dời.

njin::draw_offset_push(ctx, ward_origin);
draw_ward(ctx, ward); // tọa độ riêng của khu
void draw_offset_pop(const context &ctx)
Bỏ độ dời của lần draw_offset_push() gần nhất.
void draw_offset_push(const context &ctx, vec2 offset, f32 scale=1.0f)
Phóng mọi hình vẽ sau đó theo scale rồi dời đi offset (đơn vị thế giới) cho tới draw_offset_pop(): đi...
Các tham số
ctxContext của engine.
offsetĐộ dời.
scaleHệ số phóng, 1 là giữ nguyên cỡ.

◆ draw_offset_pop()

void njin::draw_offset_pop ( const context & ctx)

Bỏ độ dời của lần draw_offset_push() gần nhất.

Các tham số
ctxContext của engine.

◆ blend_begin()

void njin::blend_begin ( const context & ctx,
blend_mode mode )

Đổi cách trộn màu cho mọi thứ vẽ sau đó, cho đến blend_end().

Các tham số
ctxContext của engine.
modeCách trộn.

◆ draw_set_y_sort()

void njin::draw_set_y_sort ( context & ctx,
i32 layer,
bool on )

Bật sắp xếp theo Y cho một lớp vẽ: trong lớp đó, sprite và particle có y lớn hơn (thấp hơn trên màn hình) được vẽ sau, nên đè lên thứ đứng phía sau nó.

Đây là cách game top-down cho nhân vật đi vòng ra sau cây, sau nhà.

y là transform.pos.y + sprite::sort_offset. Đặt sprite::origin ở chân ({0.5, 1}) thì không cần sort_offset. Tilemap trong lớp đó vẫn vẽ trước mọi sprite (làm nền). Hai thứ cùng y giữ thứ tự ổn định giữa các frame.

Các tham số
ctxContext của engine.
layerLớp vẽ (njin::sprite::layer).
ontrue để bật.

◆ blend_end()

void njin::blend_end ( const context & ctx)

Trở lại cách trộn mặc định.

Các tham số
ctxContext của engine.

◆ clip_begin()

void njin::clip_begin ( const context & ctx,
rect area )

Chỉ vẽ bên trong một vùng của màn hình, cho đến clip_end().

area tính bằng pixel màn hình, không qua camera. Dùng cho khung cuộn trong UI.

Các tham số
ctxContext của engine.
areaVùng được vẽ, pixel màn hình.

◆ clip_end()

void njin::clip_end ( const context & ctx)

Bỏ giới hạn vùng vẽ.

Các tham số
ctxContext của engine.