Atölye › Wolfenstein Tarzı 3B Labirent › 10/18. adım
Şimdi ışın yürüsün: her seferinde hangi ızgara çizgisi daha yakınsa onu geçip yeni bir kareye girsin. O kare
zemin değilse duvarı bulduk. Bu yönteme DDA denir. castRay artık asıl cevabı döndürüyor: duvar ne kadar uzakta,
hangi tür çizgiyi geçerek çarptı, duvarın türü ve tam çarpma noktası.
```js
// Walk the grid line by line (DDA) until the ray enters a wall tile.
while (true) {
let dist
let side
if (nextX < nextY) {
dist = nextX
nextX += deltaX
col += stepX
side = 'x'
} else {
dist = nextY
nextY += deltaY
row += stepY
side = 'y'
}
const tile = MAP[row][col]
if (tile !== '.') return { dist, side, tile, x: player.x + dx * dist, y: player.y + dy * dist }
}
```if (nextX < nextY) → sonraki dikey çizgi daha yakın: onu geç. Uzaklık dist = nextX; ondan sonraki dikey çizgi
deltaX ötede; ışın artık bir sütun ötede (col += stepX).side → duvarın hangi yüzüne çarptık: 'x' sol/sağ yüz, 'y' üst/alt yüz. Gölgelendirmede lazım olacak.MAP[row][col] zemin değilse duvar: bilgileri döndür. x, y → başlangıç + yön × uzaklık: tam çarpma noktası.while (true) → sonsuz döngü gibi görünür ama labirent duvarlarla kapalı, ışın mutlaka bir duvara çarpar ve
return döngüyü bitirir.castRay'in üstüne yorum satırını yaz.return { deltaX, ... } satırını sil; yerine while döngüsünü yaz. Çalıştır.Beceriler: Hız ve yerçekimi, Döngüler
← Işın: ızgara çizgileri 3B görünüm →