Repository navigation
Maps ko
English | ็น้ซไธญๆ | ๆฅๆฌ่ช | ํ๊ตญ์ด
BIT8_CLI๋ 2D ๊ฒ์ ์ธ๊ณ๋ฅผ ๋ง๋ค๊ธฐ ์ํ Tile ๊ธฐ๋ฐ Map ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
Map์ ๋ฑ๋ก๋ Asset ID๋ฅผ ์ฌ์ฉํ๋ฉฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ํ Node์ Camera๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ BIT8_CLI 0.1.0์ Map ์์คํ ์ ์๊ฐํฉ๋๋ค.
BIT8_CLI๋ ๊ณ ์ ๋ Tile ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
8 ร 8 ํฝ์
๊ธฐ๋ณธ Map ํฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
64 ร 64 Tiles
Map์ ๋๋น์ ๋์ด๋ ๊ฐ๊ฐ ๋ค์ ๋ฒ์๋ก ์ค์ ํ ์ ์์ต๋๋ค.
1 ~ 256 Tiles
Map Cell์ ์ต๋ ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
65,536 Cells
Map ํฌ๊ธฐ๋ ๊ฒ์์ 64ร64 ํฝ์ Framebuffer์ ๋ ๋ฆฝ์ ์ ๋๋ค.
๋ฐ๋ผ์ ํ๋ฉด์ ํ์๋๋ ์์ญ๋ณด๋ค ํจ์ฌ ํฐ 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
์ด ๊ตฌ์กฐ๋ ์ค๋ช ์ ์ํ ์์์ ๋๋ค.
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)์ ํด๋นํฉ๋๋ค.
๊ฐ 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 ํ์ผ ํ์์ ์๋๋๋ค.
ํ์ฌ Map์ ๊ทธ๋ฆฌ๋ ค๋ฉด map()์ ์ฌ์ฉํฉ๋๋ค.
func draw()
cls(0)
map()
end์ด ์ฝ๋๋ Framebuffer๋ฅผ ์ง์ฐ๊ณ Map์ ๊ทธ๋ฆฝ๋๋ค.
ํ์๋๋ ์์ญ์ Framebuffer์ ํ์ฌ ํ์ฑํ๋ Camera์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ ํํ ๋งค๊ฐ๋ณ์ ์ฌ์์ ํด๋น BIT8_CLI ๋ฆด๋ฆฌ์ค์ ์์ค ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
BIT8_CLI๋ ๋ค์ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
mget(...)์ด API๋ Runtime Map์์ Tile ๊ฐ์ ์ฝ์ต๋๋ค.
Map ์์ ์ Pixel ์ขํ๊ฐ ์๋ Tile ์ขํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
BIT8_CLI๋ ๋ค์ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
mset(...)์ด API๋ Runtime Map์ Tile ๊ฐ์ ์์ ํฉ๋๋ค.
Runtime์์ ์์ ํ Map ๋ฐ์ดํฐ๋ ์คํ ์ค์ธ ๊ฒ์ ์ํ์ ์ํฅ์ ์ค๋๋ค.
์ด๋ Editor์์ ์๋ณธ .b8map ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ ์์
๊ณผ ๋ค๋ฆ
๋๋ค.
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 ๋์์ ์ต์ข ๊ธฐ์ค์ ์๋๋๋ค.
Map์๋ Node๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
Node๋ ๋ค์ ์ ๋ณด๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
- ์์ ์ ์ธ Node ID
- ์ด๋ฆ
- ์์น
- ํ์ฑํ ์ํ
- Script ์ฐธ์กฐ
- ์ ํ์ Sprite ์ฐธ์กฐ
- ์ ํ์ Collider
Node๋ ๊ฒ์ ์ธ๊ณ ๊ตฌ์กฐ์ ์ผ๋ถ์ ๋๋ค.
Node Script๋ Runtime ์คํ ์ค ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.
์:
func update()
self.x = self.x + 1
end์์ธํ ๋ด์ฉ์ Nodes ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Map์๋ Camera Node๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
Camera๋ ๊ฒ์ ์ธ๊ณ์์ ํ๋ฉด์ ํ์ํ ์์ญ์ ๊ฒฐ์ ํฉ๋๋ค.
BIT8_CLI๋ 64ร64 ํฝ์ Viewport๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Camera ์ขํ๋ Viewport์ ์ค์ฌ์ ๋ํ๋ ๋๋ค.
World ์ขํ๋ฅผ ์ฌ์ฉํ๋ ๋ ๋๋ง ์์ ์ ํ์ฑํ๋ Camera๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณํ๋ฉ๋๋ค.
๋ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ Screen ์ขํ ๊ธฐ๋ฐ ์์ ์:
cls(0)
pix(32, 32, 7)๊ณ์ Screen ์ขํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ Camera ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ฑ๋ก๋ Tile์ Solid๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์:
solid = [6]์ด ์ค์ ์ ํด๋น Tilesheet์ ์ฌ์ฏ ๋ฒ์งธ Tile์ Solid๋ก ์ง์ ํฉ๋๋ค.
Solid Tile์ Collision ํ์ ์์ ์ ์ฒด 8ร8 ํฝ์ ์์ญ์ ์ฐจ์งํฉ๋๋ค.
Node๋ ๋ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
self:collide(dx, dy)
self:move(dx, dy)์์ธํ ๋ด์ฉ์ Collision ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
์ง์๋๋ ์ต๋ Map ํฌ๊ธฐ:
256 ร 256 Tiles
์ต๋ Cell ์:
65,536 Cells
Map ์ ์ฒด๊ฐ 64ร64 ํฝ์ Framebuffer ์์ ๋ค์ด๊ฐ ํ์๋ ์์ต๋๋ค.
ํ์ฌ Viewport์๋ ๊ฒ์ ์ธ๊ณ์ ์ผ๋ถ๋ง ํ์๋ฉ๋๋ค.
ํฐ Map์ ์ค๊ณํ ๋๋ ๋ ๋๋ง ์ฑ๋ฅ๊ณผ ๊ฒ์ํ๋ ์ด ์๊ตฌ ์ฌํญ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
BIT8_CLI 0.1.0์ Tile ๊ธฐ๋ฐ Map ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
๋ค์ ๊ธฐ๋ฅ์ ํ๋ฆฝ๋ 0.1.0 Map ์์คํ ์ ํฌํจ๋์ง ์์ต๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ Map Layer
- ๋ํ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ World Object๋ก ์ง์ ๋ฐฐ์นํ๋ ๊ธฐ๋ฅ
- ์์ ํ Physics Engine
์ด๋ฌํ ๊ธฐ๋ฅ์ ํฅํ ๋ฒ์ ์์ ๊ฒํ ๋ ์ ์์ต๋๋ค.
๋ค์ ํ์ด์ง:
๊ด๋ จ ๋ฌธ์:
Map์ ์ธ๊ณ๋ฅผ ์ ์ํ๊ณ , Node๋ ๊ทธ ์ธ๊ณ์ ๋์์ ๋ถ์ฌํฉ๋๋ค.
Current Version: 0.1.0