Nodes ko - Akiaaaa20/Bit8_CLI GitHub Wiki
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, ์ด๋ ๋ฐ ๋ ๋๋ง์ ์ค์ ์ ๋ก๋๋ค.
๋ค์ ๋จ๊ณ
๋ค์ ํ์ด์ง:
๊ด๋ จ ๋ฌธ์:
Main์ ๊ฒ์์ ๊ตฌ์ฑํ๊ณ , Node๋ ๊ทธ ์ธ๊ณ ์์์ ๋์ํฉ๋๋ค.