Runtime API ko - Akiaaaa20/Bit8_CLI GitHub Wiki
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 ๊ธฐ๋ฅ์ ์ ๋ฆฌํ ๋ฌธ์์ ๋๋ค. ์ ์ฒด ํจ์ ์๊ทธ๋์ฒ์ ํน์ํ ๋์์ ํด๋น ๋ฆด๋ฆฌ์ค์ ์์ค ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ธํด์ผ ํฉ๋๋ค.