Repository navigation
Nodes ko
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는 그 세계 안에서 동작합니다.
Node는 게임 세계에 존재하는 객체입니다.
예를 들어 다음과 같은 대상을 Node로 표현할 수 있습니다.
- 플레이어 캐릭터
- 적 캐릭터
- NPC
- 상호작용 가능한 객체
- 움직이는 발판
- 동작을 가진 장식 객체
각 Node는 고유한 위치, 속성, 동작을 가질 수 있습니다.
단순한 Tile과 달리 Node는 Script를 실행하고 Runtime 상태를 유지할 수 있습니다.
Node는 Map 데이터의 일부로 저장됩니다.
BIT8_CLI는 .b8map 형식을 사용합니다.
Map에는 다음 데이터가 포함될 수 있습니다.
- Tile 데이터
- Node
- Camera
Node는 Tile Grid와 독립적입니다.
따라서 개별 Map Cell에 제한되지 않고 이동할 수 있습니다.
예를 들어 Map이 8×8 픽셀 Tile을 사용하더라도 캐릭터는 1픽셀 단위로 움직일 수 있습니다.
자세한 내용은 Maps 페이지를 참고하세요.
각 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 좌표를 사용합니다.
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를 실행합니다.
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 파일에 자동 저장되는 것은 아닙니다.
Node는 좌표를 직접 변경할 수 있습니다.
self.x = self.x + 1하지만 좌표를 직접 변경하는 것과 Collision을 고려한 이동은 다릅니다.
BIT8_CLI는 다음 메서드를 제공합니다.
self:move(dx, dy)이 메서드는 지원되는 Collision 규칙을 적용하면서 Node 이동을 시도합니다.
예:
func update()
self:move(1, 0)
end이 코드는 Node를 오른쪽으로 1픽셀 이동하려고 시도합니다.
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 페이지를 참고하세요.
Collision을 고려한 이동은 픽셀 단위 판정을 사용합니다.
Runtime은 X축을 먼저 처리한 다음 Y축을 처리합니다.
이동은 1픽셀씩 단계적으로 판정됩니다.
따라서 Node는 Tile 기반 Collision World에서도 픽셀 단위로 이동할 수 있습니다.
예:
self:move(2, 1)이 경우 먼저 수평 이동을 시도하고, 그다음 수직 이동을 처리합니다.
Collision에 따라 요청한 이동의 일부 또는 전체가 차단될 수 있습니다.
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이 미리 정의되어 있다고 가정합니다.
BIT8_CLI 0.1.0은 Map 데이터에 Sprite 참조를 저장하는 기능을 지원합니다.
Node는 Sprite Definition의 이름을 저장할 수 있습니다.
예:
Player
Runtime은 Node의 초기화 함수를 실행하기 전에 저장된 Sprite 참조를 해석합니다.
따라서 각 Script에서 Sprite를 수동으로 연결하지 않아도 Node는 지정된 Sprite를 사용하여 시작할 수 있습니다.
Node는 다음 속성을 제공합니다.
self.enabled이 속성은 Node의 활성화 여부를 나타냅니다.
예:
func update()
if self.enabled then
self.x = self.x + 1
end
end활성화 상태는 게임 동작을 제어하는 데 사용할 수 있습니다.
비활성화된 Node의 정확한 Runtime 처리 방식은 해당 릴리스의 구현을 확인해야 합니다.
BIT8_CLI는 Main Script와 Node 동작을 분리합니다.
Main Script는 게임 전체의 Lifecycle을 구성할 수 있습니다.
func init()
end
func update()
end
func draw()
cls(0)
map()
endNode Script는 개별 게임 객체의 동작에 집중합니다.
예:
func init()
self.speed = 1
end
func update()
self:move(self.speed, 0)
end
func draw()
self:spr()
end이 구조는 모듈화된 게임 개발을 지원합니다.
Main은 게임을 구성합니다.
Node는 게임 세계 안에서 동작합니다.
BIT8_CLI의 VS Code Map Workspace는 Node 편집 도구를 제공합니다.
Workspace에서 지원되는 Node 속성을 확인하고 수정할 수 있습니다.
주요 기능:
- Node 선택
- 위치
- 이름
- Script 참조
- 활성화 상태
- 지원되는 Sprite 및 Collider 속성
Map Workspace는 프로젝트 데이터를 편집합니다.
Runtime은 Node의 동작을 실행합니다.
자세한 내용은 Map Workspace 페이지를 참고하세요.
BIT8_CLI 0.1.0은 경량 Node 시스템을 제공합니다.
완전한 Scene Tree Engine은 아닙니다.
다음 기능은 확립된 0.1.0 Node 모델에 포함되지 않습니다.
- 범용 계층형 Scene Tree
- 완전한 Rigid Body Physics
- 완전한 Event / Signal 시스템
- 임의의 Runtime 속성 자동 영구 저장
Node 시스템은 경량 게임 객체, Script, 이동 및 렌더링에 중점을 둡니다.
다음 페이지:
관련 문서:
Main은 게임을 구성하고, Node는 그 세계 안에서 동작합니다.
Current Version: 0.1.0