الدرس 8 من 10

ورقة الإطارات

هدف الدرس

اختيار الخلية التي ترسمها ووقت رسمها

01

الشرح

الشخصية المتحرّكة في ألعاب البكسل صورة واحدة كبيرة تُسمّى ورقة الإطارات (sprite sheet)، وهي مقسومة إلى شبكة من خلايا متساوية، في كل خلية لقطة من الحركة، والتحريك أن ترسم في كل لحظة خلية مختلفة منها.

وحين تستدعي drawImage بتسع قيم فإنها تقصّ جزءًا من الصورة الأصلية وترسمه، هكذا: drawImage(sheet, sx, sy, sw, sh, dx, dy, dw, dh). فكل ما تحتاج إلى معرفته هو مكان الخلية رقم frame، فعمودها هو باقي قسمة رقمها على عدد الأعمدة، وصفّها هو ناتج القسمة مقرّبًا إلى الأسفل.

والخطأ الشائع أن تنتقل إلى الإطار التالي مع كل استدعاء لـ requestAnimationFrame، فتركض الشخصية على شاشة 144 هرتز أسرع منها على شاشة 60 هرتز بنحو مرّتين ونصف. والصحيح أن تحسب رقم الإطار من الزمن المنقضي، فتضرب الثواني في fps وتقرّب الناتج إلى الأسفل، ثم تأخذ باقي قسمته على count حتى يعود إلى الإطار الأول بعد الأخير.

02

المطلوب

اكتب frameRect(frame, cols, w, h) لتُرجع { sx, sy, sw, sh } لخلية الإطار في ورقة فيها cols عمودًا، ومقاس كل خلية w × h. ثم اكتب frameAt(t, fps, count) لتُرجع رقم الإطار بعد مرور t ثانية. والورقة نفسها مرسومة بالكود على canvas مخفية، فلا حاجة إلى تحميل صور من الإنترنت.

الفحوص

5 فحوص
  1. الإطارات تتتابع في الصفّ الأول
  2. بعد آخر عمود ينتقل إلى الصفّ التالي
  3. في الخلية المستطيلة تُستعمل w للأعمدة وh للصفوف
  4. رقم الإطار محسوب من الزمن وfps
  5. يعود إلى الإطار الأول بعد الأخير
03

تلميحات

0/3
index.html
المعاينة
index.html100%
–/5

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

تجد 5 فحوص في بطاقة «المطلوب».