Skip to content

Nodes ko

Shiraishi_AKi edited this page Oct 6, 2026 · 1 revision

Node 시스템

English | 繁體中文 | 日本語 | 한국어

Node는 BIT8_CLI의 핵심 구성 요소 중 하나입니다.

Node는 게임 세계 안에 존재하는 객체를 나타냅니다. 속성을 저장하고, Script를 실행하며, Collision을 처리하고, Sprite를 표시할 수 있습니다.

BIT8_CLI 0.1.0에서 Node는 Map 시스템의 일부로 정의되며 Runtime에 의해 실행됩니다.

Main assembles the game. Nodes live the game.

Main은 게임을 구성하고, Node는 그 세계 안에서 동작합니다.

1. Node란?

Node는 게임 세계에 존재하는 객체입니다.

예를 들어 다음과 같은 대상을 Node로 표현할 수 있습니다.

  • 플레이어 캐릭터
  • 적 캐릭터
  • NPC
  • 상호작용 가능한 객체
  • 움직이는 발판
  • 동작을 가진 장식 객체

각 Node는 고유한 위치, 속성, 동작을 가질 수 있습니다.

단순한 Tile과 달리 Node는 Script를 실행하고 Runtime 상태를 유지할 수 있습니다.

2. Node와 Map

Node는 Map 데이터의 일부로 저장됩니다.

BIT8_CLI는 .b8map 형식을 사용합니다.

Map에는 다음 데이터가 포함될 수 있습니다.

  • Tile 데이터
  • Node
  • Camera

Node는 Tile Grid와 독립적입니다.

따라서 개별 Map Cell에 제한되지 않고 이동할 수 있습니다.

예를 들어 Map이 8×8 픽셀 Tile을 사용하더라도 캐릭터는 1픽셀 단위로 움직일 수 있습니다.

자세한 내용은 Maps 페이지를 참고하세요.

3. Node 속성

각 Node는 Script에 다음 속성을 제공합니다.

속성 설명
self.id 안정적인 Node 식별자
self.name Node 이름
self.x World X 좌표
self.y World Y 좌표
self.enabled Node 활성화 여부

예:

func update()
    self.x = self.x + 1
end

이 코드는 업데이트할 때마다 Node의 X 좌표를 증가시킵니다.

Node 위치는 World Pixel 좌표를 사용합니다.

4. Node Script

Node는 BIT8_CLI의 Lua 기반 Script를 참조할 수 있습니다.

Script 파일의 확장자는 다음과 같습니다.

.b8

예:

player.b8

Node Script는 다음 Lifecycle Function을 정의할 수 있습니다.

func init()
end

func update()
end

func draw()
end

이 함수들은 초기화, 동작 업데이트, 그래픽 그리기를 담당합니다.

Runtime은 게임 Lifecycle에 따라 Node Script를 실행합니다.

5. self 객체

Node Script에서 self는 현재 Node를 나타냅니다.

self를 통해 Node 속성과 지원되는 메서드에 접근할 수 있습니다.

예:

func init()
    self.speed = 1
end

func update()
    self.x = self.x + self.speed
end

이 예제에서는 speed라는 Runtime 속성을 생성합니다.

사용자 정의 Node 상태는 Runtime 실행 중에 유지됩니다.

Script에서 만든 사용자 정의 속성이 원본 .b8map 파일에 자동 저장되는 것은 아닙니다.

6. Node 이동

Node는 좌표를 직접 변경할 수 있습니다.

self.x = self.x + 1

하지만 좌표를 직접 변경하는 것과 Collision을 고려한 이동은 다릅니다.

BIT8_CLI는 다음 메서드를 제공합니다.

self:move(dx, dy)

이 메서드는 지원되는 Collision 규칙을 적용하면서 Node 이동을 시도합니다.

예:

func update()
    self:move(1, 0)
end

이 코드는 Node를 오른쪽으로 1픽셀 이동하려고 시도합니다.

7. Collision 판정

BIT8_CLI는 Node Collision Query를 제공합니다.

self:collide(dx, dy)

이 메서드는 요청한 이동이 지원되는 Collision Geometry와 충돌하는지 확인합니다.

판정 자체는 Node를 이동시키지 않습니다.

예:

func update()
    if not self:collide(1, 0) then
        self:move(1, 0)
    end
end

이 코드는 오른쪽으로 이동할 수 있는지 확인한 후 이동을 시도합니다.

Runtime은 Solid Tile과의 Collision을 지원합니다.

Node에는 선택적으로 Collider 정보를 정의할 수도 있습니다.

BIT8_CLI 0.1.0은 완전한 Physics Engine을 제공하지 않습니다.

자세한 내용은 Collision 페이지를 참고하세요.

8. 이동 처리 순서

Collision을 고려한 이동은 픽셀 단위 판정을 사용합니다.

Runtime은 X축을 먼저 처리한 다음 Y축을 처리합니다.

이동은 1픽셀씩 단계적으로 판정됩니다.

따라서 Node는 Tile 기반 Collision World에서도 픽셀 단위로 이동할 수 있습니다.

예:

self:move(2, 1)

이 경우 먼저 수평 이동을 시도하고, 그다음 수직 이동을 처리합니다.

Collision에 따라 요청한 이동의 일부 또는 전체가 차단될 수 있습니다.

9. Node와 Sprite

Node는 Sprite Definition을 사용하여 그래픽을 표시할 수 있습니다.

Sprite Definition은 다음 파일에 저장됩니다.

bit8.sprites.toml

Node는 정의된 Sprite를 연결할 수 있습니다.

self:sprite("Player")

Sprite에는 이름이 지정된 Animation을 포함할 수 있습니다.

예:

self:play("walk")

현재 Sprite Frame을 그리려면 다음 메서드를 사용합니다.

self:spr()

사용 예:

func init()
    self:sprite("Player")
    self:play("idle")
end

func draw()
    self:spr()
end

이 예제는 Player라는 Sprite와 idle이라는 Animation이 미리 정의되어 있다고 가정합니다.

10. 영구 Sprite 참조

BIT8_CLI 0.1.0은 Map 데이터에 Sprite 참조를 저장하는 기능을 지원합니다.

Node는 Sprite Definition의 이름을 저장할 수 있습니다.

예:

Player

Runtime은 Node의 초기화 함수를 실행하기 전에 저장된 Sprite 참조를 해석합니다.

따라서 각 Script에서 Sprite를 수동으로 연결하지 않아도 Node는 지정된 Sprite를 사용하여 시작할 수 있습니다.

11. Node 활성화 및 비활성화

Node는 다음 속성을 제공합니다.

self.enabled

이 속성은 Node의 활성화 여부를 나타냅니다.

예:

func update()
    if self.enabled then
        self.x = self.x + 1
    end
end

활성화 상태는 게임 동작을 제어하는 데 사용할 수 있습니다.

비활성화된 Node의 정확한 Runtime 처리 방식은 해당 릴리스의 구현을 확인해야 합니다.

12. Main Script와 Node Script

BIT8_CLI는 Main Script와 Node 동작을 분리합니다.

Main Script는 게임 전체의 Lifecycle을 구성할 수 있습니다.

func init()
end

func update()
end

func draw()
    cls(0)
    map()
end

Node Script는 개별 게임 객체의 동작에 집중합니다.

예:

func init()
    self.speed = 1
end

func update()
    self:move(self.speed, 0)
end

func draw()
    self:spr()
end

이 구조는 모듈화된 게임 개발을 지원합니다.

Main은 게임을 구성합니다.

Node는 게임 세계 안에서 동작합니다.

13. Node 편집

BIT8_CLI의 VS Code Map Workspace는 Node 편집 도구를 제공합니다.

Workspace에서 지원되는 Node 속성을 확인하고 수정할 수 있습니다.

주요 기능:

  • Node 선택
  • 위치
  • 이름
  • Script 참조
  • 활성화 상태
  • 지원되는 Sprite 및 Collider 속성

Map Workspace는 프로젝트 데이터를 편집합니다.

Runtime은 Node의 동작을 실행합니다.

자세한 내용은 Map Workspace 페이지를 참고하세요.

14. 현재 제한 사항

BIT8_CLI 0.1.0은 경량 Node 시스템을 제공합니다.

완전한 Scene Tree Engine은 아닙니다.

다음 기능은 확립된 0.1.0 Node 모델에 포함되지 않습니다.

  • 범용 계층형 Scene Tree
  • 완전한 Rigid Body Physics
  • 완전한 Event / Signal 시스템
  • 임의의 Runtime 속성 자동 영구 저장

Node 시스템은 경량 게임 객체, Script, 이동 및 렌더링에 중점을 둡니다.

다음 단계

다음 페이지:

Sprites and Animation

관련 문서:

Main은 게임을 구성하고, Node는 그 세계 안에서 동작합니다.

Clone this wiki locally