Atölye › Flappy tarzı kuş › 19/30. adım
Borulara çarpma zamanı. Soruyu ikiye bölüyoruz; ilki: kuş borunun hizasında mı? (yatayda üst üste biniyorlar mı?)
Daire ile dikdörtgeni tam hesaplamak zor; oyunlar genelde bir hile kullanır: kuşu, dairesini içine alan kare kutu
gibi düşünürüz. Kutunun sol kenarı bird.x - bird.r, sağ kenarı bird.x + bird.r.
Bu adımda sadece ilk soruyu soruyoruz. Sonuç biraz haksız olacak (aşağıdaki soruya bak); bir sonraki adımda düzelteceğiz.
```js
function hitsPipe(pipe) {
const overlapsX = bird.x + bird.r > pipe.x && bird.x - bird.r < pipe.x + PIPE_WIDTH
return overlapsX
}
if (hitGround || hitSky || pipes.some(hitsPipe)) state = 'over'
```function hitsPipe(pipe) → bir boru alır (parametre) ve "kuş buna çarpıyor mu?" sorusuna cevap verir.bird.x + bird.r > pipe.x → kuşun sağ kenarı borunun sol kenarını geçti mi? > büyüktür.&& → "ve": iki taraf da doğru olmalı.bird.x - bird.r < pipe.x + PIPE_WIDTH → kuşun sol kenarı borunun sağ kenarına gelmedi mi? < küçüktür.overlapsX (yatayda biniyor).return overlapsX → cevabı fonksiyonun dönüş değeri olarak geri ver.pipes.some(hitsPipe) → some "herhangi biri tutuyor mu?": boruları tek tek hitsPipe'a verir; en az biri için
cevap doğruysa sonuç doğru. hitsPipe burada parantezsiz: onu some her boru için kendisi çağırır.addPipe fonksiyonunun kapanan } işaretinin altına bir boş satır bırak ve hitsPipe'ı yaz.update içindeki if (hitGround || hitSky) state = 'over' satırında hitSky'dan sonra || pipes.some(hitsPipe) ekle.Beceriler: Çarpışma tespiti
← Geçilen boruları sil Açıklıktan geç →