Skip to content

Maps ko

Shiraishi_AKi edited this page Oct 6, 2026 · 1 revision

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

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ ๋ฒ„์ „์—์„œ ๊ฒ€ํ† ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

๋‹ค์Œ ํŽ˜์ด์ง€:

Nodes

๊ด€๋ จ ๋ฌธ์„œ:

Map์€ ์„ธ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ , Node๋Š” ๊ทธ ์„ธ๊ณ„์— ๋™์ž‘์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

Clone this wiki locally