Atölye › Mario Tarzı Platform › 5/37. adım

Kutu bir şeye değiyor mu?

Ne yapıyoruz

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)
}
```

Ne işe yarıyor

Sıra sende

  1. const TILE = 32 satırının altına EPS satırını yaz.
  2. solidAt fonksiyonunun altına bir boş satır bırak ve yorumuyla birlikte overlapsSolid fonksiyonunu yaz.
  3. Çalıştır: ekran aynı, kontroller yeşil.

Beceriler: Çarpışma tespiti

Tüm adımlar

  1. Gökyüzü
  2. Metinden bir bölüm
  3. Döşemeleri çiz
  4. Ne katı?
  5. Kutu bir şeye değiyor mu?
  6. Başlangıcı bul
  7. Oyuncuyu çiz
  8. Yerçekimi
  9. Döşemelere inmek
  10. Hangi tuşlar basılı?
  11. Hızlan
  12. Sürtünme
  13. Duvarlar
  14. Zıpla
  15. Kafanı çarp
  16. Kısa zıplamalar
  17. Birkaç karelik tolerans
  18. Coyote time
  19. Takip eden kamera
  20. Uçlarda dur
  21. Yalnız ekrandakini çiz
  22. Altınlar
  23. Topla
  24. Say: ekran ve dünya
  25. Düşmanlar
  26. Yürüyen düşmanlar
  27. Kenardan düşme
  28. Canlar ve yeniden başlamak
  29. Çukura düşmek
  30. Düşmanlar incitir
  31. Ez!
  32. Ezilen düşman gider
  33. Oyun bitti
  34. Yeniden oyna
  35. Bayrak
  36. Bayrağa ulaş
  37. Kendin yap: zıplama tamponu