Atölye › Mario Tarzı Platform › 13/37. adım
Kutu şu an duvarların içinden geçiyor. Duvarlar da zemin gibi çalışır: önce yatay hareket et; bir döşemenin içine girdiysen onun yanına geri yapıştır. Sonra, önceki gibi, dikey hareket.
İki ekseni ayrı ayrı ele almak, döşeme çarpışmalarının anahtar hilesidir. İkisini birden hareket ettirip sonra bir çakışma bulsaydın, çarptığın şeyin duvar mı zemin mi olduğunu anlayamazdın; kutu döşemelerin eklem yerlerine takılırdı.
```js
// Move along one axis at a time; if that ends inside a wall, snap back to the wall's edge.
function moveX(body) {
body.x += body.vx
if (!overlapsSolid(body)) return false
if (body.vx > 0) body.x = Math.floor((body.x + body.w - EPS) / TILE) * TILE - body.w
else body.x = Math.floor(body.x / TILE) * TILE + TILE
body.vx = 0
return true
}
moveX(player)
```body.x += body.vx → önce yatay hareket.if (!overlapsSolid(body)) return false → bir şeye girmediyse "duvara çarpmadım" (false) de ve çık.if (body.vx > 0) → sağa gidiyorduk: Math.floor((body.x + body.w - EPS) / TILE) * TILE sağ kenarın girdiği
döşemenin sol kenarı; - body.w ile kutunun sağ tarafı tam oraya yaslanır.else → sola gidiyorduk: Math.floor(body.x / TILE) * TILE sol kenarın girdiği döşemenin sol kenarı; + TILE o
döşemenin sağ kenarı. Kutunun sol tarafı oraya yaslanır.body.vx = 0 → duvara çarpınca yatay hız biter.return true → "duvara çarptım". Bu cevabı ileride düşmanlar geri dönmek için kullanacak.updatePlayer içinde player.x += player.vx yerine moveX(player).function moveY(body) { satırının üstüne yorumuyla birlikte moveX fonksiyonunu yaz; altında bir boş satır
kalsın.updatePlayer içindeki player.x += player.vx satırını sil; yerine moveX(player) yaz.Beceriler: Çarpışma tespiti