Atölye › Asteroids › 16/41. adım
Sıra kayalarda. Bir kaya neyi bilir? Yerini (x, y), hızını (vx, vy) ve boyunu (size): 3 büyük, 2 orta,
1 küçük. Yarıçapını (r) boyuna göre küçük bir tablodan okuruz.
Her kaya rastgele bir yöne uçar; küçükler daha hızlı olabilir. Bir de shape (biçim): kayanın 10 köşesinin
merkezden ne kadar uzakta olduğu. Şimdilik hepsi 1 (düzgün bir şekil); ileride pürüzlendireceğiz.
Bu adımda ekran değişmez; kaya yapan fonksiyonu yazıyoruz.
```js
const SIZES = [0, 15, 28, 45] // asteroid radius for size 1, 2 and 3
function makeAsteroid(x, y, size) {
const angle = Math.random() * Math.PI * 2
const speed = 0.6 + Math.random() * (4 - size) * 0.5 // smaller asteroids are faster
const shape = Array.from({ length: 10 }, () => 1)
return { x, y, vx: Math.cos(angle) * speed, vy: Math.sin(angle) * speed, size, r: SIZES[size], shape }
}
```const SIZES = [0, 15, 28, 45] → tablo: SIZES[3] → 45. Dizide sıra numaraları 0'dan başlar; baştaki 0 boş
bir yer tutucu, böylece "boy 3" doğrudan SIZES[3] olur.Math.random() → her çağrıldığında 0 ile 1 arasında (1 hariç) rastgele bir sayı.Math.random() * Math.PI * 2 → 0 ile tam tur arasında rastgele bir açı.0.6 + Math.random() * (4 - size) * 0.5 → en az 0.6 olan bir hız. size küçüldükçe (4 - size) büyür: küçük
kayalar daha hızlı olabilir. Büyük kaya 0.6–1.1, küçük kaya 0.6–2.1.vx: Math.cos(angle) * speed → açıdan hıza geçiş, itkideki cos/sin hesabının aynısı.Array.from({ length: 10 }, () => 1) → "10 öğeli bir dizi yap; her öğeyi şu fonksiyonla üret": [1, 1, ..., 1].return { x, y, ..., size, ..., shape } → kısa yazım: ad ile değer aynıysa bir kez yazılır (size = size: size).const BULLET_LIFE = ... satırının altına SIZES satırını yaz.function shoot() { satırının üstüne makeAsteroid fonksiyonunu yaz; altında bir boş satır kalsın.Beceriler: Diziler ve nesneler, Hız ve yerçekimi
← Mermilere ömür Dört büyük kaya →