Atölye › Mario Tarzı Platform › 5/37. adım
Oyuncu (ve ileride düşmanlar) bir kutu: { x, y, w, h } → sol üst köşesi, eni ve boyu. Kutu katı bir şeyin içine
girdi mi? Kutu bir döşemeden büyük olmadığı sürece dört köşesine bakmak yeter: iki köşe arasına bir döşeme sığamaz.
İnce bir ayrıntı var: x = 0'da duran 24 piksel genişliğindeki bir kutu 0'dan 24'e kadar ama 24 hariç yer kaplar;
24. piksel artık yanındakine aittir. Bu yüzden sağ ve alt kenarı kıl payı içeride sayacağız: EPS = 0.01. Böyle
olmazsa zeminin tam üstünde duran kutu, zeminin içinde sanılır.
```js
const EPS = 0.01 // a hair: the right and bottom edges are just inside the box
// Bodies are never bigger than a tile, so checking their four corners is enough.
function overlapsSolid(body) {
const right = body.x + body.w - EPS
const bottom = body.y + body.h - EPS
return solidAt(body.x, body.y) || solidAt(right, body.y) || solidAt(body.x, bottom) || solidAt(right, bottom)
}
```const right = body.x + body.w - EPS → kutunun en sağdaki noktası: sağ kenardan kıl payı içeride.const bottom = body.y + body.h - EPS → en alttaki noktası.solidAt(body.x, body.y) → sol üst köşe; sonra sağ üst, sol alt, sağ alt. || → herhangi biri katıysa true.- 1 değil de - 0.01? Oyuncu yarım piksel gibi küsuratlı yerlerde durabilecek. - 1 olsaydı yarım piksel
zemine gömülmesi fark edilmezdi. Böyle kenar hataları birçok oyunda karakterin duvara yapışmasına, zeminde
titremesine yol açar.const TILE = 32 satırının altına EPS satırını yaz.solidAt fonksiyonunun altına bir boş satır bırak ve yorumuyla birlikte overlapsSolid fonksiyonunu yaz.Beceriler: Çarpışma tespiti