0%
التصادمات وصناديق الاصطدام (Hitboxes) — الفصل 24

الفصل 24 — التصادمات وصناديق الاصطدام

الجزء 2A — أساسيات اللعبة ثنائية الأبعاد · الفصل 24 من 62 · 8 ساعات

الفصل 24 — التصادمات وصناديق الاصطدام

المستوى: متوسط المدة المقدّرة: 8 ساعات المتطلبات المسبقة: الفصل 20 (حلقة اللعبة وdelta time)، الفصل 21 (Canvas والإحداثيات)، الفصل 22 (الـ sprites)، الفصل 23 (السرعة المتجهة والفيزياء البسيطة) ما ستتقنه في نهاية الفصل: كتابة كشف التصادم يدويًا بالكامل للعبة ثنائية الأبعاد — AABB والدوائر والنقطة والدائرة-المستطيل — ثم حله بشكل سليم محورًا بمحور، وتفادي الـ tunneling، وتصفية الاختبارات بشبكة مكانية وأقنعة، وجعل اللعبة تتفاعل (أضرار، التقاط، موت).


24.0 — أهداف الفصل

في نهاية هذا الفصل ستكون قادرًا على:

  • شرح السبب الذي يجعل التصادم هو اللبنة التي تحوّل الرسم المتحرك إلى لعبة؛
  • التمييز بوضوح بين الكشف والحل، ومعرفة أنهما مشكلتان مختلفتان؛
  • تعريف hitbox وبيان السبب الذي يمنع من مطابقتها تمامًا لحدود الـ sprite؛
  • التفريق بين hitbox وhurtbox وtrigger؛
  • تعريف المستطيل المحاذي للمحاور (AABB) وكتابة الصنف المقابل له؛
  • صياغة اختبار AABB بالفرنسية قبل كتابته بلغة Dart؛
  • كتابة اختبار AABB برمجيًا، وشرح سبب اختبار عدم التصادم؛
  • كتابة تصادم دائرة-دائرة دون استدعاء sqrt أبدًا؛
  • كتابة تصادم نقطة-مستطيل وتصادم دائرة-مستطيل؛
  • حساب عمق التداخل على المحور X وعلى المحور Y؛
  • حل التصادم بالدفع على المحور الأصغر؛
  • التعرف على خطأ الشخصية الملتصقة بالجدار وإصلاحه؛
  • فصل الحركة إلى مرحلتين: X ثم Y؛
  • كشف الأرض والسقف والجدران، واستنتاج estAuSol منها؛
  • شرح tunneling وإصلاحه بأخذ عينات فرعية أو بـ swept AABB؛
  • تقدير كلفة اختبار «الجميع ضد الجميع» وتقليلها؛
  • الفصل بين broad phase وnarrow phase؛
  • تنفيذ شبكة مكانية للتقسيم؛
  • تعريف طبقات وأقنعة للتصادم باستخدام العمليات على البتات؛
  • جعل اللعبة تتفاعل: أضرار، التقاط، موت؛
  • إدارة حصانة مؤقتة بعد التعرض لضربة؛
  • عرض الـ hitboxes في وضع التنقيح (debug)؛
  • تحديد ما ستفعله Flame بدلًا منك بدءًا من الفصل 32 بدقة؛
  • تجميع زنزانة قابلة للّعب تضم جدرانًا وعملات وعفريتًا (gobelin).

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!