Atölye › Wolfenstein Tarzı 3B Labirent › 9/18. adım
Işın ızgara çizgilerini birer birer geçer. Işın boyunca iki tür uzaklık lazım: bir sonraki dikey çizgiye (sonraki sütuna) ve bir sonraki yatay çizgiye (sonraki satıra) ne kadar var, ve iki dikey (ya da iki yatay) çizgi arası ne kadar.
```js
// How far along the ray one whole tile across (or down) is.
const deltaX = Math.abs(1 / dx)
const deltaY = Math.abs(1 / dy)
// How far along the ray the next vertical (or horizontal) grid line is.
let nextX = (dx > 0 ? col + 1 - player.x : player.x - col) * deltaX
let nextY = (dy > 0 ? row + 1 - player.y : player.y - row) * deltaY
return { deltaX, deltaY, nextX, nextY }
```deltaX = Math.abs(1 / dx) → yana bir tam kare gitmek için ışın boyunca ne kadar yol gerekir. Dümdüz sağa
giden ışında 1; eğik ışında daha fazla. Math.abs → eksi çıkmasın.nextX → oyuncunun karesinde sonraki dikey çizgiye kalan pay (col + 1 - player.x sağa, player.x - col sola),
çarpı deltaX: ışın boyunca o çizgiye uzaklık.dy 0'dır, 1 / 0 → Infinity (sonsuz). Bu işimize yarar:
"sonsuz uzakta" demek.return şimdilik bu dördünü veriyor; sonraki adımda asıl cevaba dönecek.castRay'deki return satırını sil; yerine bu satırları yaz. Çalıştır.
Beceriler: Hız ve yerçekimi
← Işın: nereden başlıyor Işın: duvara kadar yürü →