Atölye › Sonsuz Koşucu › 11/19. adım
Kaktüse değmek koşuyu bitirsin. İki kutu, hem yatayda hem dikeyde her biri diğerinin bittiği yerden önce başlıyorsa üst üste biner. Bu klasik bir çarpışma testidir.
Bir incelik: kutuları kenarlarından 6'şar piksel küçültüyoruz. Köşeden sıyırmak çarpma sayılmasın; oyuncu "bu değmedi ki!" diye kızmasın. Buna affedici çarpışma kutusu denir.
```js
const MARGIN = 6 // forgiving hitboxes: shrink both boxes by this much
function hits(o) {
return (
runner.x + MARGIN < o.x + o.w &&
runner.x + runner.w - MARGIN > o.x &&
runner.y + MARGIN < o.y + o.h &&
runner.y + runner.h - MARGIN > o.y
)
}
if (obstacles.some(hits)) {
state = 'over'
}
if (state === 'over') {
ctx.font = 'bold 28px sans-serif'
ctx.fillText('Game Over', canvas.width / 2, canvas.height / 2)
ctx.font = '16px sans-serif'
ctx.fillText('Press Space to try again', canvas.width / 2, canvas.height / 2 + 28)
}
```&& ile hepsi doğru olmalı:+ MARGIN, - MARGIN → koşucunun kutusu her kenardan 6 piksel içeride sayılır.obstacles.some(hits) → herhangi bir engel çarpıyor mu? some, fonksiyonu her engel için dener.state = 'over' → koşu biter; update artık 'running' olmadığı için durur, her şey donar.CUT satırının altına MARGIN satırını yaz.spawn fonksiyonunun altına bir boş satır bırakıp hits fonksiyonunu yaz.update'in sonuna, bir boş satırdan sonra çarpışma kontrolünü yaz.draw'ın sonuna, hazır mesajının altına Game Over bloğunu yaz.Beceriler: Çarpışma tespiti, Oyun durumları
← Başlangıcı bekle Yeniden dene →