Atölye › Asteroids › 30/41. adım
Bir adalet sorunu var: gemi ortada yeniden doğarken oradan bir kaya geçiyorsa, oyuncu tek tuşa basmadan bir can daha kaybeder. Klasik çözüm: birkaç saniyelik dokunulmazlık.
Gemiye ne zamana kadar güvende olduğunu yazacağız: safeUntil = şimdi + 2 saniye. Çarpışmayı sadece o an geçtiyse
sayacağız.
```js
const SAFE_TIME = 2000 // milliseconds of invulnerability after respawning
ship = { x: canvas.width / 2, y: canvas.height / 2, angle: -Math.PI / 2, vx: 0, vy: 0, safeUntil: now + SAFE_TIME }
if (now >= ship.safeUntil && asteroids.some((asteroid) => hits(ship, SHIP_R * 0.7, asteroid, asteroid.r))) {
```SAFE_TIME = 2000 → 2 saniye (milisaniye cinsinden).safeUntil: now + SAFE_TIME → her yeni gemi "şu ana 2 saniye ekle; o zamana kadar güvendeyim" bilgisini taşır.now >= ship.safeUntil && → şimdiki zaman güvenli sürenin sonuna geldiyse ya da geçtiyse (>= "büyük ya da eşit")
ve bir kaya değiyorsa çarp.const POINTS = ... satırının altına SAFE_TIME satırını yaz.resetShip içinde gemi nesnesinin sonuna, vy: 0'dan sonra , safeUntil: now + SAFE_TIME ekle.update içindeki çarpma if'inde parantezin başına now >= ship.safeUntil && ekle.Beceriler: Oyun durumları, Çarpışma tespiti
← Saat kaç? Güvendeyken yanıp sön →