Atölye › Angry Birds Tarzı Sapan › 31/47. adım
Çarpma ne kadar sertti? collide bunu zaten biliyor: closing, kutuların birbirine ne hızla yaklaştığıydı.
Nazik bir dokunuş (bir bloğun ötekinin üstüne oturması gibi) hiçbir şey yapmamalı. O yüzden yalnız 2'nin üstündeki
hız sayılır, her birimi 25 can. Örnek: 4 hızla çarpan tahta (4 - 2) × 25 = 50 can kaybeder, 60'tan 10'a düşer;
1.5 hızla dokunan hiç kaybetmez.
Bu tek eşik oyunun hissinin büyük kısmını verir: kulede duran bloklar asla zarar görmez, tam hızla gelen kuş tahtayı parçalar. Yere düşmek de sayılır: düşüş hızıyla.
```js
damage(a, closing)
damage(b, closing)
}
// Hits harder than a gentle landing hurt; things fall apart at 0 hp.
function damage(b, speed) {
if (speed > 2) b.hp -= (speed - 2) * 25
}
if (b.y + b.h > GROUND) {
if (b.vy > 0) damage(b, b.vy)
```damage(a, closing) ve damage(b, closing) → collide'ın sonunda iki gövde de yaklaşma hızı kadar hasar alır.
(Ayrılan kutular için closing <= 0 olduğunda fonksiyon daha önce return ile çıkmıştı; onlara hasar yok.)function damage(b, speed) { → hasar kuralı:if (speed > 2) → yalnız 2'den hızlı çarpmalar sayılır.b.hp -= (speed - 2) * 25 → eşiğin üstündeki her hız birimi 25 can götürür.if (b.vy > 0) damage(b, b.vy) → zemine düşerken çarpan (vy artı: aşağı gidiyor) düşüş hızı kadar hasar
alır. Kuleden düşen bir şey düşüşten kırılabilir.collide'ın sonuna, son sürtünme satırının (b.vy -= f * nx * ib) altına iki damage satırını yaz.collide'ın kapanan }'sinden sonra, function step() { satırının üstüne yorumu ve damage fonksiyonunu
yaz.step içinde if (b.y + b.h > GROUND) { satırının hemen altına if (b.vy > 0) damage(b, b.vy) yaz.Beceriler: Çarpışma tespiti