Atölye › Mario Tarzı Platform › 9/37. adım
Çarpışmanın tarifi: önce hareket et, sonra kontrol et. Hareket katı bir şeyin içinde bittiyse, çarptığın döşemenin kenarına geri yapıştır.
Düşerken (vy > 0) ayaklar alttaki döşemeye girmiştir: ayakları o döşemenin tam üstüne koyarız ve oyuncu artık
yerde (grounded). Her durumda dikey hız sıfırlanır. moveY her kutuyla çalışacak; ileride düşmanlar da onu
kullanacak.
```js
function moveY(body) {
body.grounded = false
body.y += body.vy
if (!overlapsSolid(body)) return
if (body.vy > 0) {
body.y = Math.floor((body.y + body.h - EPS) / TILE) * TILE - body.h
body.grounded = true
}
body.vy = 0
}
moveY(player)
```body.grounded = false → bir şeye inmedikçe yerde sayılmaz.body.y += body.vy → önce hareket et.if (!overlapsSolid(body)) return → bir şeye girmediyse iş bitti.if (body.vy > 0) { → aşağı gidiyorduk, yani ayaklar bir döşemeye girdi:Math.floor((body.y + body.h - EPS) / TILE) → ayakların girdiği satır.* TILE → o döşemenin üst kenarı (piksel). - body.h → ayaklar tam oraya gelsin diye kutunun y'si.body.grounded = true → artık yerde.body.vy = 0 → dikey hareket durur.updatePlayer içinde player.y += player.vy yerine moveY(player).overlapsSolid fonksiyonunun altına bir boş satır bırak ve moveY fonksiyonunu yaz.updatePlayer içindeki player.y += player.vy satırını sil; yerine moveY(player) yaz.Beceriler: Hız ve yerçekimi, Çarpışma tespiti
← Yerçekimi Hangi tuşlar basılı? →