Camera ko - Akiaaaa20/Bit8_CLI GitHub Wiki

Camera ์‹œ์Šคํ…œ

English | ็น้ซ”ไธญๆ–‡ | ๆ—ฅๆœฌ่ชž | ํ•œ๊ตญ์–ด

BIT8_CLI๋Š” ๊ฒŒ์ž„ ์„ธ๊ณ„์—์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์˜์—ญ์„ ์ œ์–ดํ•˜๋Š” Camera ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

BIT8_CLI 0.1.0์—์„œ Camera๋Š” Map ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜๋ฉฐ World ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ Œ๋”๋ง์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

๊ฒŒ์ž„์€ ๊ณ ์ •๋œ 64 ร— 64 ํ”ฝ์…€ Viewport๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

1. Camera ๊ฐœ์š”

Camera๋Š” ๊ฒŒ์ž„ ์„ธ๊ณ„์—์„œ ํ‘œ์‹œํ•  ์˜์—ญ์˜ ์ค‘์‹ฌ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

Framebuffer ํ•ด์ƒ๋„๋Š” ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

64 ร— 64 pixels

Map์€ Viewport๋ณด๋‹ค ํ›จ์”ฌ ํด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Camera๋Š” ํฐ ๊ฒŒ์ž„ ์„ธ๊ณ„์˜ ์–ด๋А ๋ถ€๋ถ„์ด ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

2. Camera์™€ Map

Camera ๋ฐ์ดํ„ฐ๋Š” Map ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

.b8map ํŒŒ์ผ์—๋Š” ๋‹ค์Œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Tile ๋ฐ์ดํ„ฐ
  • Node
  • Camera

Camera๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Framebuffer ํ•ด์ƒ๋„๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  Map์˜ ๋‹ค๋ฅธ ์˜์—ญ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Maps ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

3. Camera ์œ„์น˜

Camera๋Š” World ์ขŒํ‘œ์ƒ์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ด ์œ„์น˜๋Š” Viewport์˜ ์ค‘์‹ฌ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์˜ˆ:

Camera position: (100, 80)
Viewport size:   64 ร— 64

๊ฐœ๋…์ ์œผ๋กœ ํ‘œ์‹œ ์˜์—ญ์€ Camera ์ค‘์‹ฌ์—์„œ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์•ฝ 32ํ”ฝ์…€ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

๋Œ€๋žต์ ์ธ ํ‘œ์‹œ ์˜์—ญ:

X: 68 to 131
Y: 48 to 111

์ •ํ™•ํ•œ ํ”ฝ์…€ ๊ฒฝ๊ณ„๋Š” Runtime์˜ ์ขŒํ‘œ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ˜์˜ฌ๋ฆผ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. World ์ขŒํ‘œ

World ์ขŒํ‘œ๋Š” ๊ฒŒ์ž„ ์„ธ๊ณ„ ์•ˆ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์˜ˆ:

  • Map Tile
  • Node
  • Node Sprite
  • World ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ Œ๋”๋ง ์ž‘์—…

Camera๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์ง€์›๋˜๋Š” World ์ขŒํ‘œ ๋ Œ๋”๋ง์ด Camera ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Viewport์— ๊ฒŒ์ž„ ์„ธ๊ณ„์˜ ๋‹ค๋ฅธ ์˜์—ญ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. Screen ์ขŒํ‘œ

Screen ์ขŒํ‘œ๋Š” Framebuffer ๋‚ด๋ถ€์˜ ๊ณ ์ •๋œ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ขŒํ‘œ ๋ฒ”์œ„:

X: 0 to 63
Y: 0 to 63

์ผ๋ถ€ ๋ Œ๋”๋ง ์ž‘์—…์€ Screen ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ:

cls(0)
pix(32, 32, 7)

์ด๋Ÿฌํ•œ ์ž‘์—…์€ Screen ์ขŒํ‘œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ Camera ์ด๋™์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UI๋‚˜ ํ™”๋ฉด Overlay๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

6. World ์ขŒํ‘œ๋ฅผ Screen ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

๊ฐ„๋‹จํ•œ Camera ๋ณ€ํ™˜ ๊ณต์‹:

screen_x = world_x - camera_x + 32
screen_y = world_y - camera_y + 32

์˜ˆ:

World position:  (100, 80)
Camera position: (100, 80)

Screen position: (32, 32)

Camera ์ค‘์‹ฌ์— ์žˆ๋Š” ๊ฐ์ฒด๋Š” ํ™”๋ฉด ์ค‘์•™ ๊ทผ์ฒ˜์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ณต์‹์€ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ํ”ฝ์…€ ์œ„์น˜๋Š” Runtime์˜ ์ •์ˆ˜ ์ขŒํ‘œ ์ฒ˜๋ฆฌ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. Active Camera ์„ ํƒ

Map์—๋Š” ์—ฌ๋Ÿฌ Camera๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BIT8_CLI 0.1.0์€ ๋‹ค์Œ ๊ทœ์น™์œผ๋กœ Active Camera๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™”๋œ Camera ์ค‘ ID๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ Camera๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ทœ์น™์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ Camera๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์„ ํƒ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ:

Camera ID 1 โ†’ Disabled
Camera ID 2 โ†’ Enabled
Camera ID 3 โ†’ Enabled

Active Camera:

Camera ID 2

8. Camera์™€ Tile Rendering

Map Rendering์€ World ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Camera๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด Map์€ ํ‘œ์‹œํ•  World ์˜์—ญ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

์˜ˆ:

func draw()
    cls(0)
    map()
end

Camera๋Š” 64ร—64 Framebuffer ์•ˆ์— ํ‘œ์‹œ๋˜๋Š” Map ์˜์—ญ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

9. Camera์™€ Sprite

Node Sprite๋Š” World ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Camera๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์ง€์›๋˜๋Š” Sprite Rendering์ด Screen ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ:

func draw()
    self:spr()
end

Node์˜ World ์ขŒํ‘œ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Camera๋Š” Sprite๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์œ„์น˜์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Sprites and Animation ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

10. Camera์™€ UI

๊ฒŒ์ž„์—์„œ๋Š” ํŠน์ • ๊ทธ๋ž˜ํ”ฝ์„ ํ™”๋ฉด์˜ ๊ณ ์ •๋œ ์œ„์น˜์— ํ‘œ์‹œํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ:

  • HP ํ‘œ์‹œ
  • ์นด์šดํ„ฐ
  • ๋ฉ”๋‰ด
  • Screen Overlay

์ด๋Ÿฌํ•œ ์š”์†Œ์—๋Š” Screen ์ขŒํ‘œ ๋ Œ๋”๋ง์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ:

func draw()
    cls(0)
    map()

    pix(32, 32, 7)
end

์—ฌ๊ธฐ์„œ pix()๋Š” ๊ณ ์ •๋œ Screen ์ขŒํ‘œ์— ํ”ฝ์…€์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

Camera๋Š” ์ด ํ”ฝ์…€์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

11. Camera ํŽธ์ง‘

BIT8_CLI์˜ VS Code Map Workspace๋Š” Camera ์‹œ๊ฐํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” Map์„ ํŽธ์ง‘ํ•˜๋ฉด์„œ Camera ์œ„์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Camera ๋ฐ์ดํ„ฐ๋Š” Map ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Runtime์€ Active Camera๋ฅผ ์„ ํƒํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Map Workspace ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

12. Camera์™€ Viewport ํฌ๊ธฐ

BIT8_CLI 0.1.0์€ ๊ณ ์ •๋œ Framebuffer ํ•ด์ƒ๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

64 ร— 64 pixels

Camera๋Š” ํ‘œ์‹œ๋˜๋Š” World ์˜์—ญ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Framebuffer ์ž์ฒด์˜ ํ•ด์ƒ๋„๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ž‘์€ Viewport๋ฅผ ํ†ตํ•ด ํฐ Map์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

13. ํ˜„์žฌ ์ œํ•œ ์‚ฌํ•ญ

BIT8_CLI 0.1.0์˜ Camera ์‹œ์Šคํ…œ์€ ์ฃผ๋กœ ๋‹ค์Œ ๊ธฐ๋Šฅ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

  • Map ๋ฐ์ดํ„ฐ์— ์ €์žฅ๋˜๋Š” Camera
  • World ์ขŒํ‘œ ๋ Œ๋”๋ง ์˜คํ”„์…‹
  • ๊ณ ์ •๋œ 64ร—64 Viewport
  • ๊ฒฐ์ •์ ์ธ Active Camera ์„ ํƒ
  • Screen ์ขŒํ‘œ ๋ Œ๋”๋ง

๊ณ ๊ธ‰ Camera Effect, ์˜ํ™”์  Transition, ๋ฒ”์šฉ Camera Script Framework๋Š” ํ™•๋ฆฝ๋œ 0.1.0 ๊ธฐ๋Šฅ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

Core Systems ๋‹ค์Œ์—๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ ๋ฌธ์„œ๊ฐ€ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

CLI Reference

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

Map์€ ์„ธ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ , Camera๋Š” ๋ฌด์—‡์„ ๋ณด์—ฌ ์ค„์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.