الدرس 9 من 10

نظام الجسيمات

هدف الدرس

ولادة وحركة وعمر، وحذف من الخلف

01

الشرح

الشرر والدخان والانفجارات ليست رسومًا جاهزة؛ هي مئات النقاط الصغيرة، لكلٍّ منها موضع وسرعة وعمر بالثواني. كل إطار يتحرّك الجسيم بسرعته وينقص عمره بـ dt، ومن نفد عمره يُحذف.

والحذف أثناء المرور على المصفوفة فخّ معروف: splice(i, 1) يزيح كل ما بعد i خانة إلى الوراء، فتقفز الحلقة الأمامية فوق الجسيم التالي فلا تحدّثه في هذا الإطار. الحلّ أن تمرّ من الخلف: الإزاحة حينها لا تمسّ إلا ما مررت به.

ولا بد من سقف: كل انفجار يضيف عشرات الجسيمات، وتتابعها يُثقل كل إطار حتى تتعثّر اللعبة. فما زاد على max لا يولد. وكل عشوائية تأتي من rng الممرَّرة، فيتكرّر الانفجار نفسه في الاختبار.

02

المطلوب

اكتب emit(system, x, y, count, rng): تضيف إلى system.particles حتى count جسيمًا من (x, y) دون تجاوز system.max، كل جسيم { x, y, vx, vy, life } بسرعة واتجاه وعمر من rng. واكتب update(system, dt): تحرّك كل جسيم بـ vx * dt وvy * dt، وتنقص life بـ dt، وتحذف من صار عمره صفرًا أو أقل.

معايير التصحيح

6 معايير
  1. emit تضيف count جسيمًا من النقطة
  2. ولا تتجاوز max
  3. الجسيم يتحرّك بسرعته × dt
  4. العمر ينقص بـ dt
  5. الميت يُحذف ولا يُتخطّى جاره
  6. العشوائية كلها من rng
index.html
المعاينة
index.html100%
–/6

اضغط «تشغيل» ليبدأ الفحص.

6 معايير في بطاقة «المطلوب».