Maps ko - Akiaaaa20/Bit8_CLI GitHub Wiki
Map ์์คํ
English | ็น้ซไธญๆ | ๆฅๆฌ่ช | ํ๊ตญ์ด
BIT8_CLI๋ 2D ๊ฒ์ ์ธ๊ณ๋ฅผ ๋ง๋ค๊ธฐ ์ํ Tile ๊ธฐ๋ฐ Map ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
Map์ ๋ฑ๋ก๋ Asset ID๋ฅผ ์ฌ์ฉํ๋ฉฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ํ Node์ Camera๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ BIT8_CLI 0.1.0์ Map ์์คํ ์ ์๊ฐํฉ๋๋ค.
1. Map ๊ฐ์
BIT8_CLI๋ ๊ณ ์ ๋ Tile ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
8 ร 8 ํฝ์
๊ธฐ๋ณธ Map ํฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
64 ร 64 Tiles
Map์ ๋๋น์ ๋์ด๋ ๊ฐ๊ฐ ๋ค์ ๋ฒ์๋ก ์ค์ ํ ์ ์์ต๋๋ค.
1 ~ 256 Tiles
Map Cell์ ์ต๋ ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
65,536 Cells
Map ํฌ๊ธฐ๋ ๊ฒ์์ 64ร64 ํฝ์ Framebuffer์ ๋ ๋ฆฝ์ ์ ๋๋ค.
๋ฐ๋ผ์ ํ๋ฉด์ ํ์๋๋ ์์ญ๋ณด๋ค ํจ์ฌ ํฐ Map์ ๋ง๋ค ์ ์์ต๋๋ค.
2. Map ํ์ผ
BIT8_CLI๋ ๋ค์ ํ์ฅ์๋ฅผ ์ฌ์ฉํ์ฌ Map ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
.b8map
์:
world.b8map
Map ํ์ผ์๋ Tile ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ฉฐ Node์ Camera๋ฅผ ์ ์ํ ์๋ ์์ต๋๋ค.
ํ๋ก์ ํธ ๊ตฌ์กฐ ์์:
my-bit8-game/
โโโ main.b8
โโโ bit8.assets.toml
โโโ world.b8map
โโโ assets/
โโโ terrain (A).png
์ด ๊ตฌ์กฐ๋ ์ค๋ช ์ ์ํ ์์์ ๋๋ค.
3. Map ์ขํ
Map์ Tile ์ขํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ฐ Map Cell์ ๊ฒ์ ์ธ๊ณ์์ 8ร8 ํฝ์ ์์ญ์ ๋ํ๋ ๋๋ค.
์:
Tile (0, 0) โ World Pixel (0, 0)
Tile (1, 0) โ World Pixel (8, 0)
Tile (2, 0) โ World Pixel (16, 0)
Tile (0, 1) โ World Pixel (0, 8)
Tile ์ขํ๋ฅผ Pixel ์ขํ๋ก ๋ณํํ๋ ๊ณต์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
pixel_x = tile_x ร 8
pixel_y = tile_y ร 8
์๋ฅผ ๋ค์ด Tile ์ขํ (5, 3)์ World Pixel ์ขํ (40, 24)์ ํด๋นํฉ๋๋ค.
4. Map Cell
๊ฐ Map Cell์ ๋ฑ๋ก๋ Tile์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์:
A1
A2
A3
์ด ์๋ณ์๋ ๋ค์ ํ์ผ์ ํตํด ๊ด๋ฆฌ๋๋ ๋ฑ๋ก๋ Asset์ ์ฐธ์กฐํฉ๋๋ค.
bit8.assets.toml
๋น์ด ์๋ Map Cell์ ๋ค์๊ณผ ๊ฐ์ด ํ์ํฉ๋๋ค.
--
๊ฐ๋จํ Map ์์:
A1 A1 A1 A1 A1
A1 -- -- -- A1
A1 -- A2 -- A1
A1 -- -- -- A1
A1 A1 A1 A1 A1
์ด๊ฒ์ Map Cell์ ๊ฐ๋
์ ๋ณด์ฌ ์ฃผ๋ ์์์ด๋ฉฐ ์์ ํ .b8map ํ์ผ ํ์์ ์๋๋๋ค.
5. Map ๊ทธ๋ฆฌ๊ธฐ
ํ์ฌ Map์ ๊ทธ๋ฆฌ๋ ค๋ฉด map()์ ์ฌ์ฉํฉ๋๋ค.
func draw()
cls(0)
map()
end
์ด ์ฝ๋๋ Framebuffer๋ฅผ ์ง์ฐ๊ณ Map์ ๊ทธ๋ฆฝ๋๋ค.
ํ์๋๋ ์์ญ์ Framebuffer์ ํ์ฌ ํ์ฑํ๋ Camera์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ ํํ ๋งค๊ฐ๋ณ์ ์ฌ์์ ํด๋น BIT8_CLI ๋ฆด๋ฆฌ์ค์ ์์ค ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
6. Map Cell ์ฝ๊ธฐ
BIT8_CLI๋ ๋ค์ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
mget(...)
์ด API๋ Runtime Map์์ Tile ๊ฐ์ ์ฝ์ต๋๋ค.
Map ์์ ์ Pixel ์ขํ๊ฐ ์๋ Tile ์ขํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
7. Map Cell ์์
BIT8_CLI๋ ๋ค์ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
mset(...)
์ด API๋ Runtime Map์ Tile ๊ฐ์ ์์ ํฉ๋๋ค.
Runtime์์ ์์ ํ Map ๋ฐ์ดํฐ๋ ์คํ ์ค์ธ ๊ฒ์ ์ํ์ ์ํฅ์ ์ค๋๋ค.
์ด๋ Editor์์ ์๋ณธ .b8map ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ ์์
๊ณผ ๋ค๋ฆ
๋๋ค.
8. Map Workspace
BIT8_CLI์ VS Code Extension์๋ Map Workspace๊ฐ ํตํฉ๋์ด ์์ต๋๋ค.
Map Workspace๋ Map ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํธ์งํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ:
- Map Canvas
- Tile ์ ํ
- Tile ๊ทธ๋ฆฌ๊ธฐ
- Map Cell ํ์ธ
- Zoom ์กฐ์
- Node ์ ํ ๋ฐ ํธ์ง
- Camera ์๊ฐํ
- Property ํ์ธ
Map Workspace๋ Runtime๊ณผ ๋์ผํ ๊ธฐ๋ฐ ํ๋ก์ ํธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Editor ์ธํฐํ์ด์ค ์์ฒด๊ฐ Map ๋์์ ์ต์ข ๊ธฐ์ค์ ์๋๋๋ค.
9. Map ๋ด๋ถ์ Node
Map์๋ Node๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
Node๋ ๋ค์ ์ ๋ณด๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
- ์์ ์ ์ธ Node ID
- ์ด๋ฆ
- ์์น
- ํ์ฑํ ์ํ
- Script ์ฐธ์กฐ
- ์ ํ์ Sprite ์ฐธ์กฐ
- ์ ํ์ Collider
Node๋ ๊ฒ์ ์ธ๊ณ ๊ตฌ์กฐ์ ์ผ๋ถ์ ๋๋ค.
Node Script๋ Runtime ์คํ ์ค ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.
์:
func update()
self.x = self.x + 1
end
์์ธํ ๋ด์ฉ์ Nodes ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
10. Map ๋ด๋ถ์ Camera
Map์๋ Camera Node๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
Camera๋ ๊ฒ์ ์ธ๊ณ์์ ํ๋ฉด์ ํ์ํ ์์ญ์ ๊ฒฐ์ ํฉ๋๋ค.
BIT8_CLI๋ 64ร64 ํฝ์ Viewport๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Camera ์ขํ๋ Viewport์ ์ค์ฌ์ ๋ํ๋ ๋๋ค.
World ์ขํ๋ฅผ ์ฌ์ฉํ๋ ๋ ๋๋ง ์์ ์ ํ์ฑํ๋ Camera๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณํ๋ฉ๋๋ค.
๋ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ Screen ์ขํ ๊ธฐ๋ฐ ์์ ์:
cls(0)
pix(32, 32, 7)
๊ณ์ Screen ์ขํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ Camera ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
11. Solid Tile ๋ฐ Collision
๋ฑ๋ก๋ Tile์ Solid๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์:
solid = [6]
์ด ์ค์ ์ ํด๋น Tilesheet์ ์ฌ์ฏ ๋ฒ์งธ Tile์ Solid๋ก ์ง์ ํฉ๋๋ค.
Solid Tile์ Collision ํ์ ์์ ์ ์ฒด 8ร8 ํฝ์ ์์ญ์ ์ฐจ์งํฉ๋๋ค.
Node๋ ๋ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
self:collide(dx, dy)
self:move(dx, dy)
์์ธํ ๋ด์ฉ์ Collision ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
12. Map ํฌ๊ธฐ์ ์ฑ๋ฅ
์ง์๋๋ ์ต๋ Map ํฌ๊ธฐ:
256 ร 256 Tiles
์ต๋ Cell ์:
65,536 Cells
Map ์ ์ฒด๊ฐ 64ร64 ํฝ์ Framebuffer ์์ ๋ค์ด๊ฐ ํ์๋ ์์ต๋๋ค.
ํ์ฌ Viewport์๋ ๊ฒ์ ์ธ๊ณ์ ์ผ๋ถ๋ง ํ์๋ฉ๋๋ค.
ํฐ Map์ ์ค๊ณํ ๋๋ ๋ ๋๋ง ์ฑ๋ฅ๊ณผ ๊ฒ์ํ๋ ์ด ์๊ตฌ ์ฌํญ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
13. ํ์ฌ ์ ํ ์ฌํญ
BIT8_CLI 0.1.0์ Tile ๊ธฐ๋ฐ Map ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
๋ค์ ๊ธฐ๋ฅ์ ํ๋ฆฝ๋ 0.1.0 Map ์์คํ ์ ํฌํจ๋์ง ์์ต๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ Map Layer
- ๋ํ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ World Object๋ก ์ง์ ๋ฐฐ์นํ๋ ๊ธฐ๋ฅ
- ์์ ํ Physics Engine
์ด๋ฌํ ๊ธฐ๋ฅ์ ํฅํ ๋ฒ์ ์์ ๊ฒํ ๋ ์ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ
๋ค์ ํ์ด์ง:
๊ด๋ จ ๋ฌธ์:
Map์ ์ธ๊ณ๋ฅผ ์ ์ํ๊ณ , Node๋ ๊ทธ ์ธ๊ณ์ ๋์์ ๋ถ์ฌํฉ๋๋ค.