Repository navigation
Collision ko
English | ็น้ซไธญๆ | ๆฅๆฌ่ช | ํ๊ตญ์ด
BIT8_CLI๋ Tile ๊ธฐ๋ฐ 2D ๊ฒ์์ ์ํ ๊ฒฝ๋ Collision ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
BIT8_CLI 0.1.0์์ Node๋ Solid Tile๊ณผ ์ง์๋๋ Collider ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ์ ๋ฌผ์ ๊ฐ์งํ๊ณ Collision์ ๊ณ ๋ คํ ์ด๋์ ์ํํ ์ ์์ต๋๋ค.
์ด ์์คํ ์ ์์ ํ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ๋ณด๋ค ๋จ์ํ๊ณ ์์ธก ๊ฐ๋ฅํ ์ด๋ ์ฒ๋ฆฌ์ ์ค์ ์ ๋ก๋๋ค.
Collision ์์คํ ์ ์ฃผ๋ก ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- Solid Tile: ์ด๋์ ์ฐจ๋จํ๋ Map Tile
- Node Collider: Node์ ์ฐ๊ฒฐํ ์ ์๋ ์ ํ์ Collision Geometry
- Movement API: ์ด๋์ ํ์ธํ๊ณ ์คํํ๋ ๋ฉ์๋
์ฃผ์ Node ๋ฉ์๋:
self:collide(dx, dy)
self:move(dx, dy)์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด Node Script์์ Collision World์ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
Tile์ Asset Registry๋ฅผ ํตํด Solid๋ก ์ค์ ํ ์ ์์ต๋๋ค.
Asset Registry๋ ๋ค์ ํ์ผ์ ์ ์ฅ๋ฉ๋๋ค.
bit8.assets.toml
์:
solid = [6]์ด ์ค์ ์ ํด๋น Tilesheet์ ์ฌ์ฏ ๋ฒ์งธ Tile์ Solid๋ก ์ง์ ํฉ๋๋ค.
์ด ์ฝ๋๋ ์ค์ ์ ์ผ๋ถ์ด๋ฉฐ ์์ ํ Registry ํ์ผ์ ์๋๋๋ค.
Solid Tile์ Collision ํ์ ์์ ์ ์ฒด 8ร8 ํฝ์ ์์ญ์ ์ฐจ์งํฉ๋๋ค.
BIT8_CLI๋ 8ร8 ํฝ์ Tile์ ์ฌ์ฉํฉ๋๋ค.
์:
Tile (0, 0) โ Pixels (0โ7, 0โ7)
Tile (1, 0) โ Pixels (8โ15, 0โ7)
Tile (0, 1) โ Pixels (0โ7, 8โ15)
Solid Tile์ ํด๋น ์์ญ์ ํต๊ณผํ๋ ์ด๋์ ์ฐจ๋จํฉ๋๋ค.
Node๋ World Pixel ์ขํ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก Tile Grid๋ณด๋ค ์ธ๋ฐํ๊ฒ ์ด๋ํ ์ ์์ต๋๋ค.
Node์๋ ์ ํ์ ์ผ๋ก Collider ์ ๋ณด๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
Collider๋ Node์ ์ฐ๊ฒฐ๋ Collision Geometry๋ฅผ ์ ์ํฉ๋๋ค.
Runtime์ ์ง์๋๋ Collision Geometry๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋์ ํ์ ํ ์ ์์ต๋๋ค.
Collider ์ค์ ์ Node์ Map ๋ฐ์ดํฐ์ ํจ๊ป ์ ์ฅ๋ฉ๋๋ค.
์ง์๋๋ Collider ์์ฑ๊ณผ ํ์ผ ํ์์ ์ ํํ ๋ด์ฉ์ 0.1.0 ๊ตฌํ์ ์ฐธ๊ณ ํ์ธ์.
์ด๋ ์ Collision ๋ฐ์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
self:collide(dx, dy)์:
func update()
if self:collide(1, 0) then
-- ์ค๋ฅธ์ชฝ ์ด๋์ด ์ฐจ๋จ๋์์ต๋๋ค.
end
end๋งค๊ฐ๋ณ์๋ ํ์ธํ๋ ค๋ ์ด๋๋์ ๋ํ๋ ๋๋ค.
์ด ๋ฉ์๋๋ Collision๋ง ํ์ธํ๋ฉฐ Node์ ์์น๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
Collision์ ๊ณ ๋ คํ์ฌ Node๋ฅผ ์ด๋ํ๋ ค๋ฉด ๋ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
self:move(dx, dy)์:
func update()
self:move(1, 0)
end์ด ์ฝ๋๋ Node๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก 1ํฝ์ ์ด๋ํ๋ ค๊ณ ์๋ํฉ๋๋ค.
Collision์ผ๋ก ์ด๋์ด ์ฐจ๋จ๋๋ฉด ์ค์ ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ ์์ฒญํ ๊ฑฐ๋ฆฌ๋ณด๋ค ์์ ์ ์์ต๋๋ค.
BIT8_CLI 0.1.0์ 1ํฝ์ ๋จ์๋ก Collision์ ํ์ ํฉ๋๋ค.
์ด๋ ์ฒ๋ฆฌ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- X์ถ
- Y์ถ
์:
self:move(3, 2)Runtime์ ์ํ ์ด๋์ ๋จผ์ ์๋ํ๊ณ , ์ดํ ์์ง ์ด๋์ ์ฒ๋ฆฌํฉ๋๋ค.
๊ฐ ์ถ์ ์ด๋์ ํฝ์ ๋จ์๋ก ํ์ ๋ฉ๋๋ค.
์ด ๋ฐฉ์์ ๊ฒฝ๋ Tile ๊ธฐ๋ฐ ์ด๋ ์ฒ๋ฆฌ์ ์ ํฉํฉ๋๋ค.
๋ ๋ฉ์๋๋ ์๋ก ๋ค๋ฅธ ์ญํ ์ ํฉ๋๋ค.
| ๋ฉ์๋ | ์ฉ๋ | ์์น ๋ณ๊ฒฝ |
|---|---|---|
self:collide(dx, dy) |
์ด๋ ์ Collision ํ์ธ | ๋ณ๊ฒฝํ์ง ์์ |
self:move(dx, dy) |
Collision์ ๊ณ ๋ คํ ์ด๋ ์๋ | ์ด๋ํ ์ ์์ผ๋ฉด ๋ณ๊ฒฝ |
๋จ์ํ ์ด๋์๋ self:move()๋ง์ผ๋ก ์ถฉ๋ถํ ์ ์์ต๋๋ค.
์ฅ์ ๋ฌผ์ ํ์ธํ ํ ๊ฒ์ ๋์์ ๊ฒฐ์ ํด์ผ ํ๋ค๋ฉด self:collide()๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ์์ ๋ ๋ฐฉํฅ ์ ๋ ฅ ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
func update()
if btn(LEFT) then
self:move(-1, 0)
end
if btn(RIGHT) then
self:move(1, 0)
end
if btn(UP) then
self:move(0, -1)
end
if btn(DOWN) then
self:move(0, 1)
end
end์ด ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ธ 4๋ฐฉํฅ Collision ๋์ ์ด๋์ ๊ตฌํํฉ๋๋ค.
์ด ์์ ๋ Script๊ฐ ์ ์ ํ Collision ์ค์ ์ ๊ฐ์ง Node์ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
Node๋ ์ขํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
self.x = self.x + 1ํ์ง๋ง ์ขํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ ๋ค์ ๋ฉ์๋๋ ๋ค๋ฆ ๋๋ค.
self:move(1, 0)์ฅ์ ๋ฌผ์ด Node ์ด๋์ ์ํฅ์ ์ฃผ์ด์ผ ํ๋ค๋ฉด Collision์ ๊ณ ๋ คํ ์ด๋์ ์ฌ์ฉํ์ธ์.
์๋์ ์ผ๋ก Node์ ์์น๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ์ขํ๋ฅผ ์ง์ ์ค์ ํ ์ ์์ต๋๋ค.
Collision ๋ฐ์ดํฐ๋ Map๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
Map์ Tile ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , Asset Registry๋ ๋ฑ๋ก๋ Tile ์ค ์ด๋ค Tile์ด Solid์ธ์ง ์ ์ํฉ๋๋ค.
Node๋ Collision Query์ ์ด๋ ์ฒ๋ฆฌ ์ค ์ด๋ฌํ ์ ๋ณด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ Maps ๋ฐ Assets and Tilesheets ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
BIT8_CLI 0.1.0์ ๊ฒฝ๋ Collision ์์คํ ์ ์ ๊ณตํฉ๋๋ค.
์์ ํ Physics Engine์ ์๋๋๋ค.
ํ์ฌ Collision ๋ชจ๋ธ์๋ ๋ค์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ง ์์ต๋๋ค.
- ์์ ํ Rigid Body Dynamics
- ๋ฌผ๋ฆฌ ์์ง์ ํตํ ์๋ ์ค๋ ฅ ์๋ฎฌ๋ ์ด์
- ํ์ค์ ์ธ ํ๊ณผ ์ด๋๋ ๊ณ์ฐ
- ๋ฒ์ฉ ๋ฌผ๋ฆฌ ํ๋ ์์ํฌ ์์ค์ ๊ณ ๊ธ Collision Shape
๊ฐ๋ฐ์๋ Node Script๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์์ ํ์ํ ์ด๋ ๋์์ ๊ตฌํํ ์ ์์ต๋๋ค.
๋ค์ ํ์ด์ง:
๊ด๋ จ ๋ฌธ์:
Collision์ Node๊ฐ ์ด๋ํ ์ ์๋ ์์ญ์ ๊ฒฐ์ ํฉ๋๋ค.
Current Version: 0.1.0