Skip to content

Collision zh TW

Shiraishi_AKi edited this page Oct 6, 2026 · 1 revision

Collision ็ขฐๆ’ž็ณป็ตฑ

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

BIT8_CLI ๆไพ›้ฉๅˆ Tile-based 2D ้Šๆˆฒ็š„่ผ•้‡ๅŒ–็ขฐๆ’ž็ณป็ตฑใ€‚

ๅœจ BIT8_CLI 0.1.0 ไธญ๏ผŒNode ๅฏไปฅ้€้Ž Solid Tile ๅ’Œๆ”ฏๆด็š„ Collider ่ณ‡ๆ–™๏ผŒๆชขๆŸฅ้šœ็ค™็‰ฉไธฆๅŸท่กŒ็ขฐๆ’žๆ„Ÿ็Ÿฅ็งปๅ‹•ใ€‚

้€™ๅฅ—็ณป็ตฑ่‘—้‡ๆ–ผ็ฐกๅ–ฎใ€ๅฏ้ ๆธฌ็š„็งปๅ‹•่กŒ็‚บ๏ผŒ่€Œไธๆ˜ฏๅฎŒๆ•ด็š„็‰ฉ็†ๆจกๆ“ฌใ€‚

1. Collision ๆฆ‚่ฟฐ

Collision ็ณป็ตฑไธป่ฆ้€ฃๆŽฅไธ‰ๅ€‹็ต„ไปถ๏ผš

  • Solid Tile๏ผš ๆœƒ้˜ปๆ“‹็งปๅ‹•็š„ Map Tileใ€‚
  • Node Collider๏ผš ่ˆ‡ Node ้—œ่ฏ็š„้ธ็”จ็ขฐๆ’žๅ€ๅŸŸใ€‚
  • Movement API๏ผš ็”จๆ–ผๆชขๆŸฅ่ˆ‡ๅŸท่กŒ็งปๅ‹•็š„ๆ–นๆณ•ใ€‚

ไธป่ฆ็š„ Node ๆ–นๆณ•๏ผš

self:collide(dx, dy)
self:move(dx, dy)

้€™ไบ›ๆ–นๆณ•่ฎ“ Node Script ๅฏไปฅ่ˆ‡็ขฐๆ’žไธ–็•Œไบ’ๅ‹•ใ€‚

2. Solid Tile

ๅฏไปฅ้€้Ž Asset Registry ๅฐ‡ Tile ่จญๅฎš็‚บ Solidใ€‚

Asset Registry ๅ„ฒๅญ˜ๅœจ๏ผš

bit8.assets.toml

ไพ‹ๅฆ‚๏ผš

solid = [6]

้€™ๆœƒๅฐ‡ๅฐๆ‡‰ Tilesheet ็š„็ฌฌๅ…ญๅ€‹ Tile ๆจ™่จ˜็‚บ Solidใ€‚

้€™ๅชๆ˜ฏ่จญๅฎš็‰‡ๆฎต๏ผŒไธๆ˜ฏๅฎŒๆ•ด็š„ Registry ๆช”ๆกˆใ€‚

Solid Tile ๅœจ็ขฐๆ’žๅˆคๅฎšๆ™‚ๆœƒๅ ๆ“šๅฎŒๆ•ด็š„ 8ร—8 ๅƒ็ด ๅ€ๅŸŸใ€‚

3. Tile ๅบงๆจ™่ˆ‡ Collision

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 ็งปๅ‹•ไฝฟ็”จไธ–็•Œๅƒ็ด ๅบงๆจ™๏ผŒๅ› ๆญคๅฏไปฅๆฏ” Tile Grid ๆ›ด็ฒพ็ดฐๅœฐ็งปๅ‹•ใ€‚

4. Node Collider

Node ๅฏไปฅๅŒ…ๅซ้ธ็”จ็š„ Collider ่ณ‡่จŠใ€‚

Collider ๅฎš็พฉ่ˆ‡ Node ้—œ่ฏ็š„็ขฐๆ’žๅนพไฝ•ๅ€ๅŸŸใ€‚

Runtime ๅฏไปฅๅˆฉ็”จๆ”ฏๆด็š„็ขฐๆ’ž่ณ‡ๆ–™้€ฒ่กŒ็งปๅ‹•ๅˆคๅฎšใ€‚

Collider ่จญๅฎš่ˆ‡ Node ็š„ Map ่ณ‡ๆ–™ไธ€่ตทๅ„ฒๅญ˜ใ€‚

ๅฏฆ้š›ๆ”ฏๆด็š„ Collider ๅฑฌๆ€ง่ˆ‡ๆช”ๆกˆๆ ผๅผ๏ผŒๆ‡‰ไปฅ 0.1.0 ็š„ๅฏฆไฝœ็‚บๆบ–ใ€‚

5. ๆชขๆŸฅ Collision

ไฝฟ็”จ๏ผš

self:collide(dx, dy)

ๆชขๆŸฅ้ ๅฎš็š„็งปๅ‹•ๆ˜ฏๅฆๆœƒ็™ผ็”Ÿ็ขฐๆ’žใ€‚

ไพ‹ๅฆ‚๏ผš

func update()
    if self:collide(1, 0) then
        -- ๅณๆ–น็š„็งปๅ‹•ๅ—ๅˆฐ้˜ปๆ“‹ใ€‚
    end
end

ๅƒๆ•ธไปฃ่กจ้ ๅฎš็š„็งปๅ‹•ๅ็งป้‡ใ€‚

็ขฐๆ’žๆŸฅ่ฉขไธๆœƒๆ”น่ฎŠ Node ็š„ไฝ็ฝฎใ€‚

6. Collision-Aware Movement

ไฝฟ็”จ๏ผš

self:move(dx, dy)

ๅœจ้ตๅฎˆๆ”ฏๆด็š„็ขฐๆ’ž่ฆๅ‰‡ไธ‹ๅ˜—่ฉฆ็งปๅ‹•ใ€‚

ไพ‹ๅฆ‚๏ผš

func update()
    self:move(1, 0)
end

้€™ๆœƒๅ˜—่ฉฆ่ฎ“ Node ๅ‘ๅณ็งปๅ‹• 1 ๅƒ็ด ใ€‚

ๅฆ‚ๆžœ้‡ๅˆฐ้šœ็ค™็‰ฉ๏ผŒๅฏฆ้š›็งปๅ‹•่ท้›ขๅฏ่ƒฝๅฐๆ–ผ่ฆๆฑ‚็š„่ท้›ขใ€‚

7. ็งปๅ‹•ๅˆคๅฎš

BIT8_CLI 0.1.0 ไฝฟ็”จๆฏๆฌก 1 ๅƒ็ด ็š„ๆญฅ้€ฒๆ–นๅผ่™•็†็ขฐๆ’žๆ„Ÿ็Ÿฅ็งปๅ‹•ใ€‚

่™•็†้ †ๅบ็‚บ๏ผš

  1. X ่ปธ
  2. Y ่ปธ

ไพ‹ๅฆ‚๏ผš

self:move(3, 2)

Runtime ๆœƒๅ…ˆๅ˜—่ฉฆๆฐดๅนณ็งปๅ‹•๏ผŒๅ†่™•็†ๅž‚็›ด็งปๅ‹•ใ€‚

ๆฏๅ€‹ๆ–นๅ‘้ƒฝๆœƒ้€้Žๅƒ็ด ็ดšๆญฅ้€ฒ้€ฒ่กŒๅˆคๅฎšใ€‚

้€™็จฎๆ–นๅผ้ฉๅˆ่ผ•้‡ๅŒ– Tile-based Movementใ€‚

8. Collision Query ่ˆ‡ Movement

ๅ…ฉๅ€‹ๆ–นๆณ•ๆœ‰ไธๅŒ็”จ้€”ใ€‚

ๆ–นๆณ• ็”จ้€” ๆ˜ฏๅฆๆ”น่ฎŠไฝ็ฝฎ
self:collide(dx, dy) ๆชขๆŸฅ้ ๅฎš็งปๅ‹• ๅฆ
self:move(dx, dy) ๅ˜—่ฉฆ็ขฐๆ’žๆ„Ÿ็Ÿฅ็งปๅ‹• ๅฏไปฅ็งปๅ‹•ๆ™‚ๆœƒๆ”น่ฎŠ

ๅ–ฎ็ด”็š„็งปๅ‹•้€šๅธธๅฏไปฅ็›ดๆŽฅไฝฟ็”จ self:move()ใ€‚

ๅฆ‚ๆžœ้Šๆˆฒ้‚่ผฏ้œ€่ฆๅ…ˆๆชขๆŸฅ้šœ็ค™็‰ฉ๏ผŒๅ†ๆฑบๅฎšๅพŒ็บŒ่กŒ็‚บ๏ผŒๅฐฑๅฏไปฅไฝฟ็”จ self:collide()ใ€‚

9. ็ฏ„ไพ‹๏ผš็Žฉๅฎถ็งปๅ‹•

ไปฅไธ‹็ฏ„ไพ‹ไฝฟ็”จๆ–นๅ‘่ผธๅ…ฅๅธธๆ•ธ๏ผš

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

้€™ๆไพ›ๅŸบๆœฌ็š„ๅ››ๆ–นๅ‘็ขฐๆ’žๆ„Ÿ็Ÿฅ็งปๅ‹•ใ€‚

็ฏ„ไพ‹ๅ‡่จญ Script ๅทฒ็ถ“้—œ่ฏ่‡ณ้ฉ็•ถ่จญๅฎš็š„ Nodeใ€‚

10. ็›ดๆŽฅไฟฎๆ”นไฝ็ฝฎ

Node ไนŸๅฏไปฅ็›ดๆŽฅไฟฎๆ”นๅบงๆจ™๏ผš

self.x = self.x + 1

ไฝ†็›ดๆŽฅไฟฎๆ”นไฝ็ฝฎ่ˆ‡ๅ‘ผๅซ๏ผš

self:move(1, 0)

ไธฆไธ็›ธๅŒใ€‚

็•ถ้šœ็ค™็‰ฉๆ‡‰่ฉฒๅฝฑ้Ÿฟ Node ็š„็งปๅ‹•ๆ™‚๏ผŒๆ‡‰ไฝฟ็”จ็ขฐๆ’žๆ„Ÿ็Ÿฅ็งปๅ‹•ใ€‚

ๅฆ‚ๆžœ้œ€่ฆๅˆปๆ„้‡ๆ–ฐๅฎšไฝ็‰ฉไปถ๏ผŒๅฏไปฅ็›ดๆŽฅไฟฎๆ”นๅบงๆจ™ใ€‚

11. Collision ่ˆ‡ Map

Collision ่ณ‡ๆ–™่ˆ‡ Map ๅฏ†ๅˆ‡็›ธ้—œใ€‚

Map ๅ„ฒๅญ˜ Tile ่ณ‡ๆ–™๏ผŒAsset Registry ๅ‰‡่ญ˜ๅˆฅๅ“ชไบ›ๅทฒ่จปๅ†Š Tile ๆ˜ฏ Solidใ€‚

Node ๆœƒๅœจ็ขฐๆ’žๆŸฅ่ฉขๅ’Œ็งปๅ‹•้Ž็จ‹ไธญไฝฟ็”จ้€™ไบ›่ณ‡่จŠใ€‚

่ฉณ็ดฐ่ณ‡่จŠ่ซ‹้–ฑ่ฎ€ Map ่ˆ‡ Asset ่ˆ‡ Tilesheetใ€‚

12. ็›ฎๅ‰้™ๅˆถ

BIT8_CLI 0.1.0 ๆไพ›่ผ•้‡ๅŒ–็ขฐๆ’ž็ณป็ตฑใ€‚

ๅฎƒไธๆ˜ฏๅฎŒๆ•ด็š„ Physics Engineใ€‚

็›ฎๅ‰ๅทฒ็ขบ็ซ‹็š„็ขฐๆ’žๆจกๅž‹ไธๅŒ…ๅซ๏ผš

  • ๅฎŒๆ•ด็š„ Rigid Body Dynamics
  • ่‡ชๅ‹•็‰ฉ็†้‡ๅŠ›ๆจกๆ“ฌ
  • ็œŸๅฏฆ็‰ฉ็†ๅŠ›้‡่ˆ‡ๅ‹•้‡
  • ้€š็”จ็‰ฉ็†ๆก†ๆžถไธญ็š„้€ฒ้šŽ็ขฐๆ’žๅฝข็‹€

้–‹็™ผ่€…ๅฏไปฅ้€้Ž Node Script ่‡ช่กŒๅฏฆไฝœ้Šๆˆฒ้œ€่ฆ็š„็งปๅ‹•่กŒ็‚บใ€‚

ไธ‹ไธ€ๆญฅ

็นผ็บŒ้–ฑ่ฎ€๏ผš

Camera

็›ธ้—œๆ–‡ไปถ๏ผš

Collision ๆฑบๅฎš Node ๅฏไปฅ่ตฐๅˆฐๅ“ช่ฃกใ€‚

Clone this wiki locally