열정을 따라가며 #2: 위치 벡터와 Zig 더 배우기

발행: (2026년 1월 1일 오후 12:20 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Introduction

저는 야근을 하면서 작은 프로젝트를 코딩했습니다. Kafka 디버깅으로 바쁜 하루를 보낸 뒤, 사각형만 그리는 Raylib 부트스트랩으로 돌아왔습니다. 오늘의 목표는 사각형을 움직이게 하는 것이었고, 이를 성공적으로 구현했습니다.

저는 게임 개발이 처음은 아닙니다—2024년에 C++ 게임을 시도한 적이 있지만—Zig은 아직 익숙하지 않아서 흥미로운 도전이었습니다.

Player struct

const Player = struct {
    x: usize,
    y: usize,
    width: usize,
    height: usize,
};

이 구조체는 화면에 표시되는 사각형의 위치와 크기를 정의합니다.

Constructor

Zig에서는 생성자가 구조체 네임스페이스 안에 위치한 일반 함수입니다. 관례적으로 init 함수를 사용합니다:

pub fn init() Player {
    return Player{
        // initializations go here
    };
}

const Self = @This(); 로 구조체 타입에 별명을 붙일 수도 있지만, 여기서는 사용하지 않았습니다.

Draw function

pub fn draw(self: Player) void {
    const origin = rl.Vector2{
        .x = 0,
        .y = 0,
    };

    const rec = rl.Rectangle{
        .x = self.x,
        .y = self.y,
        .height = self.height,
        .width = self.width,
    };

    rl.drawRectanglePro(rec, origin, @as(f32, @floatFromInt(0)), .white);
}

rl은 Raylib 라이브러리의 별명입니다. 이 함수는 플레이어의 필드로부터 Rectangle을 만들고 이를 그립니다.

Update function

처음에 업데이트 메서드는 다음과 같이 정의되었습니다:

pub fn update(self: Player) void {
    self.x += 1;
}

self가 불변이기 때문에 동작하지 않았습니다. 구조체를 변경할 수 있도록 포인터를 전달하도록 수정합니다:

pub fn update(self: *Player) void {
    self.x += 1;
}

Centering the square

사각형을 화면 중앙에 가깝게 배치하려고 다음과 같이 시도했습니다:

return Player{
    .x = rl.getScreenHeight() / 2,
    .y = rl.getScreenWidth() / 2,
    .height = 10,
    .width = 10,
};

rl.getScreenHeight()rl.getScreenWidth()i32를 반환하고, Raylib 그리기 함수는 f32를 기대하기 때문에 값을 변환했습니다:

return Player{
    .x = @as(f32, @floatFromInt(rl.getScreenHeight())) / 2,
    .y = @as(f32, @floatFromInt(rl.getScreenWidth())) / 2,
    .height = 10,
    .width = 10,
};

이 변환으로 컴파일러는 만족하지만, 아직 정밀도는 완벽하지 않습니다.

Main loop and input handling

if (rl.isKeyDown(.d)) {
    player.update();
    player.draw();
}
rl.beginDrawing();
defer rl.endDrawing();

rl.clearBackground(.dark_gray);
player.draw();

D 키를 누르면 사각형이 오른쪽으로 이동합니다.

Conclusion

오늘은 게임 개발보다 Zig에 대해 더 많이 배웠습니다. 내일은 추가 사각형을 그려보고 충돌 감지를 탐구하여 사각형이 다른 사각형과 상호작용하도록 할 계획입니다.

Back to Blog

관련 글

더 보기 »

학습 debunning

안녕하세요, 저는 현재 프로그래밍을 배우고 있습니다. 저는 핵심 역량으로 디버깅에 집중하기로 결심했으며, 특히 코드가 왜 실패하는지 설명할 수 있는 능력을 갖추는 것이 중요하다고 생각합니다. 바로 해결책을 찾으려고 급히 뛰어들기보다는 말이죠.