الدرس 3 من 10

تصادم المستطيلات

هدف الدرس

الدالة hits(a, b) لا تعدّ التلامس تصادمًا

01

الشرح

أغلب الألعاب ثنائية الأبعاد لا تحتاج إلى أشكال دقيقة لكشف التصادم، بل تحيط كل جسم بمستطيل أضلاعه موازية للمحورين يُسمّى AABB، ثم تسأل سؤالًا واحدًا سريع الحساب: هل يتداخل المستطيلان؟

ويتداخل المستطيلان إذا تداخلا على المحورين معًا، فعلى المحور x شرطان هما a.x < b.x + b.w وa.x + a.w > b.x، ومعناهما أن كلًّا منهما يبدأ قبل أن ينتهي الآخر، وعلى المحور y شرطان مثلهما، ويكفي أن ينفصلا على محور واحد حتى لا يتصادما.

والمقارنة هنا صارمة عن قصد، أي بلا مساواة، لأن المستطيلين المتلامسين على حافّة لا يُعدّان متصادمين. فالدالة move تضع اللاعب ملاصقًا لحافّة الجدار الذي يدخله، ولو عددنا التلامس تصادمًا لبقي «مصطدمًا» بالجدار في الإطار التالي، فيُدفع إلى الجهة الأخرى حين يحاول الانزلاق بمحاذاته.

02

المطلوب

اكتب hits(a, b) لمستطيلين من الشكل { x, y, w, h }، فتُرجع true إذا تداخلا وfalse في غير ذلك، والتلامس وحده يعطي false. أما الدالة move فجاهزة، وهي تعتمد على دالتك لتوقف اللاعب عند الجدران. ولتجرّب ذلك انقر على المعاينة ثم حرّك اللاعب بالأسهم.

الفحوص

6 فحوص
  1. المستطيلان المتداخلان يتصادمان
  2. المنفصلان على أي محور لا يتصادمان
  3. التلامس على حافّة ليس تصادمًا
  4. الصغير داخل الكبير تصادم أيًّا كان ترتيبهما
  5. الدالة move توقف اللاعب ملاصقًا للجدار
  6. اللاعب الملاصق للجدار ينزلق بمحاذاته
03

تلميحات

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

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

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