Atölye › Angry Birds Tarzı Sapan › 26/47. adım
Ayırmak konumları düzeltti; ama hızlar hâlâ birbirine doğru. Kuş bir bloğa çarpınca blok itilmeli, kuş yavaşlamalı.
closing, iki kutunun normal yönünde birbirine ne hızla yaklaştığı. Artıysa bir darbe (impulse)
uygularız. Darbeyi yine ters kütleyle paylaştırırız: ağır kuşun çarptığı hafif tahta uçar, taş blok zor kıpırdar.
Biri ne kadar kaybederse öbürü o kadar kazanır: momentum (kütle × hız) çarpmadan önce ve sonra aynı kalır, tıpkı gerçek çarpışmalardaki gibi.
```js
const closing = (a.vx - b.vx) * nx + (a.vy - b.vy) * ny
if (closing <= 0) return
const j = (1.2 * closing) / (ia + ib) // 1.2: a slightly bouncy hit
a.vx -= j * nx * ia
a.vy -= j * ny * ia
b.vx += j * nx * ib
b.vy += j * ny * ib
```const closing = (a.vx - b.vx) * nx + (a.vy - b.vy) * ny → a'nın b'ye göre hızının normal yönündeki payı:
birbirlerine ne hızla yaklaşıyorlar.if (closing <= 0) return → zaten ayrılıyorlarsa sekecek bir şey yok.const j = (1.2 * closing) / (ia + ib) → darbenin büyüklüğü. 1 olsaydı yaklaşma tam durur, yapışırlardı; 1.2
onları biraz geri iter: hafif sekmeli bir çarpma.a.vx -= j * nx * ia ... → a normalin tersine, b normal yönünde hız kazanır; her biri kendi ters kütlesi
kadar. Hafif gövde (büyük ters kütle) çok değişir.collide içinde son itme satırının (b.y += ny * push * ib) altına yedi satırı yaz.collide'ı bir sonraki adımda çağıracağız.Beceriler: Hız ve yerçekimi, Çarpışma tespiti
← İç içe geçen kutuları ayır Her çift karşılaşır →