Skip to content

Runtime API ko

Shiraishi_AKi edited this page Oct 6, 2026 · 1 revision

Runtime API

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

์ด ํŽ˜์ด์ง€์—์„œ๋Š” BIT8_CLI 0.1.0์—์„œ ์ œ๊ณตํ•˜๋Š” Runtime ์Šคํฌ๋ฆฝํŠธ API๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

BIT8_CLI๋Š” Lua 5.4๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ์ž๋Š” .b8์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ function ๋Œ€์‹  func๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Runtime ๊ฐœ์š”

ํ•ญ๋ชฉ ์‚ฌ์–‘
Framebuffer 64 ร— 64 ํ”ฝ์…€
์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณ ์ • 30 Hz
Tile ํฌ๊ธฐ 8 ร— 8 ํ”ฝ์…€
Map ํฌ๊ธฐ ์ตœ๋Œ€ 256 ร— 256 Tiles
์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด Lua 5.4
ํ™•์žฅ์ž .b8

๋ผ์ดํ”„์‚ฌ์ดํด ํ•จ์ˆ˜

init()

๊ฒŒ์ž„ ์ดˆ๊ธฐํ™” ์‹œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

func init()
    x = 32
    y = 32
end

update()

๊ฒŒ์ž„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

func update()
    x = x + 1
end

์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ๊ณ ์ • 30 Hz๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

draw()

ํ˜„์žฌ ๊ฒŒ์ž„ ์ƒํƒœ๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

func draw()
    cls(0)
    pix(x, y, 7)
end

๊ทธ๋ฆฌ๊ธฐ API

cls(color)

์ง€์ •ํ•œ ํŒ”๋ ˆํŠธ ์ƒ‰์ƒ์œผ๋กœ framebuffer๋ฅผ ์ง€์›๋‹ˆ๋‹ค.

cls(0)

๋ณ„์นญ clear()๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pix(x, y, color)

์ง€์ •ํ•œ ํ™”๋ฉด ์ขŒํ‘œ์— ํ”ฝ์…€์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

pix(32, 32, 7)

๋ณ„์นญ pixel()๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

rectfill(...)

์ฑ„์›Œ์ง„ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

rectfill(10, 10, 20, 20, 7)

spr(...)

๋“ฑ๋ก๋œ Asset์—์„œ Tile์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

BIT8_CLI๋Š” ์•ˆ์ •์ ์ธ Asset ID๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

spr(A4, 16, 16)

ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ธฐ์กด ์ˆซ์ž Sprite ์ฐธ์กฐ๋„ ๊ณ„์† ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

map(...)

ํ”„๋กœ์ ํŠธ์— ๋“ฑ๋ก๋œ Tile์„ ์‚ฌ์šฉํ•˜์—ฌ Map์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

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

Map ๊ทธ๋ฆฌ๊ธฐ๋Š” ํ™œ์„ฑ Camera์˜ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ž…๋ ฅ API

btn(button)

๋ฒ„ํŠผ์ด ํ˜„์žฌ ๊ณ„์† ๋ˆŒ๋ ค ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

if btn(LEFT) then
    x = x - 1
end

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ ์ƒ์ˆ˜:

UP
DOWN
LEFT
RIGHT
A
B

btnp(button)

๋ฒ„ํŠผ์ด ์ƒˆ๋กญ๊ฒŒ ๋ˆŒ๋ ธ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

if btnp(A) then
    print("A pressed")
end

btn()๊ณผ ๋‹ฌ๋ฆฌ ํ•œ ๋ฒˆ์˜ ๋ˆ„๋ฆ„ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Map API

mget(...)

Map์—์„œ Tile ๊ฐ’์„ ์ฝ์Šต๋‹ˆ๋‹ค.

mset(...)

Runtime Map์˜ Tile ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Map ์ขŒํ‘œ, Tile ID ๋ฐ ํŽธ์ง‘ ๋™์ž‘์— ๋Œ€ํ•ด์„œ๋Š” Map ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Node API

Node Script์—์„œ๋Š” self๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ Runtime Node์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

func update()
    self.x = self.x + 1
end

Node ์†์„ฑ

์†์„ฑ ์„ค๋ช…
self.id ์•ˆ์ •์ ์ธ Node ID
self.name Node ์ด๋ฆ„
self.x ์›”๋“œ X ์ขŒํ‘œ
self.y ์›”๋“œ Y ์ขŒํ‘œ
self.enabled Node ํ™œ์„ฑํ™” ์ƒํƒœ

self:collide(dx, dy)

์ง€์ •ํ•œ ๊ฑฐ๋ฆฌ๋งŒํผ Node๋ฅผ ์ด๋™ํ–ˆ์„ ๋•Œ ์ง€์›๋˜๋Š” ์ถฉ๋Œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์™€ ์ถฉ๋Œํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

if self:collide(1, 0) then
    print("Blocked")
end

์ด ํ•จ์ˆ˜๋Š” ์ถฉ๋Œ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋ฉฐ Node๋ฅผ ์ด๋™์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถฉ๋Œ ํŒ์ •์—๋Š” ํ™œ์„ฑํ™”๋œ Node Box Collider์™€ Solid Tile์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

self:move(dx, dy)

์ถฉ๋Œ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ Node ์ด๋™์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

self:move(1, 0)

์ด๋™์€ X์ถ•์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ๋‹ค์Œ Y์ถ•์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

BIT8_CLI 0.1.0์€ ๊ธฐ๋ณธ์ ์ธ ์ถฉ๋Œ ๋Œ€์‘ ์ด๋™์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์™„์ „ํ•œ ๋ฌผ๋ฆฌ ์—”์ง„์€ ์•„๋‹™๋‹ˆ๋‹ค.

Sprite ๋ฐ Animation API

self:sprite(name)

๋“ฑ๋ก๋œ Sprite Definition์„ Node์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

self:sprite("Player")

self:play(animation)

ํ˜„์žฌ Sprite์— ์ •์˜๋œ Animation์„ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.

self:play("walk")

๊ฐ™์€ Animation์„ ๋ฐ˜๋ณตํ•ด์„œ ์š”์ฒญํ•ด๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

self:spr()

Node์˜ ํ˜„์žฌ Sprite Animation Frame์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

func draw()
    self:spr()
end

Sprite ์ •์˜๋Š” ๋‹ค์Œ ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

bit8.sprites.toml

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

Camera

BIT8_CLI๋Š” Camera Node๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑ Camera๋Š” ์ง€์›๋˜๋Š” ์›”๋“œ ์ขŒํ‘œ ๊ธฐ๋ฐ˜ ๊ทธ๋ฆฌ๊ธฐ ์ž‘์—…์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

Camera ์ขŒํ‘œ๋Š” 64 ร— 64 Viewport์˜ ์ค‘์‹ฌ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

cls(), pix(), rectfill() ๊ฐ™์€ ํ™”๋ฉด ์ขŒํ‘œ ๊ธฐ๋ฐ˜ ๊ทธ๋ฆฌ๊ธฐ ์ž‘์—…์€ Camera ์ด๋™์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์˜ˆ์ œ: Node ์ด๋™๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜

๋‹ค์Œ ์˜ˆ์ œ๋Š” Sprite๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ํ•ด๋‹น Animation์ด ์ •์˜๋œ Node๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

func update()
    if btn(LEFT) then
        self:move(-1, 0)
        self:play("walk")
    elseif btn(RIGHT) then
        self:move(1, 0)
        self:play("walk")
    else
        self:play("idle")
    end
end

func draw()
    self:spr()
end

Animation ์ด๋ฆ„์€ Sprite Definition์— ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฌธ์„œ

์ด ํŽ˜์ด์ง€๋Š” BIT8_CLI 0.1.0์—์„œ ํ™•๋ฆฝ๋œ API ๊ธฐ๋Šฅ์„ ์ •๋ฆฌํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์™€ ํŠน์ˆ˜ํ•œ ๋™์ž‘์€ ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Clone this wiki locally