Atölye › Bilardo › 28/33. adım
Bir topa sert ve açılı vurursan yanlış yöne gidebilir. Neden? Güç 16'da top karede 16 piksel ilerler. İki topun
değdiğini fark ettiğimizde çoktan birkaç piksel iç içe geçmiş olabilirler; collide'da her şeyi belirleyen
merkezler arası çizgi artık ilk değme anındaki çizgi değildir.
Çözüm: her kareyi SUB tane küçük adıma böl. Her adım hızın yalnız 1/SUB'i kadar ilerletir ve çarpışmaları
kontrol eder. Hızlı ve sıyırarak bir vuruşta çarpılan topun yön hatası:
| karede adım | hata (radyan) |
|---|---|
| 1 | 0.62 |
| 4 | 0.12 |
| 8 | 0.04 |
Sekiz adım gerçeğe yeterince yakın ve hâlâ ucuz. Sürtünme karede bir kez kalır; toplar yine aynı mesafeyi gider.
```js
const SUB = 8 // physics steps per frame, so fast balls cannot jump through each other
b.x += b.vx / SUB
b.y += b.vy / SUB
for (let i = 0; i < SUB; i++) step()
```const SUB = 8 → karede kaç fizik adımı; yorum nedenini söylüyor.b.x += b.vx / SUB → her adım hızın sekizde biri kadar ilerletir.for (let i = 0; i < SUB; i++) step() → karede sekiz adım: toplam yine hızın tamamı kadar yol. Ama çarpışmalar ve
cepler sekiz kez, çok daha küçük örtüşmelerle kontrol edilir.MAX_POWER satırının altına SUB yaz.step içinde b.x += b.vx ve b.y += b.vy satırlarını / SUB ile böl.update içindeki step() satırını for (let i = 0; i < SUB; i++) step() yap.Beceriler: Hız ve yerçekimi, Çarpışma tespiti
← Geri çek ve bırak Vuruşu tahmin et →