الدرس 3 من 10
تصادم المستطيلات
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
hits(a, b)، والتلامس ليس تصادمًا
الشرح
أغلب تصادمات الألعاب ثنائية الأبعاد لا تحتاج أشكالًا دقيقة: يُحاط كل جسم بمستطيل غير مائل — AABB — ويُسأل سؤال واحد رخيص: هل يتداخل المستطيلان؟
يتداخلان إن تداخلا على المحورين معًا. على x شرطان: a.x < b.x + b.w وa.x + a.w > b.x — أي أن كلًّا منهما يبدأ قبل أن ينتهي الآخر — ومثلهما على y. ويكفي انفصالهما على محور واحد ليفترقا.
والمقارنة الصارمة قرار مقصود: المتلامسان على حافّة لا يتصادمان. فالدالة move تُلصق اللاعب بحافّة الجدار الذي يدخله، ولو عُدّ التلامس تصادمًا لظلّ «مصطدمًا» به في الإطار التالي، فيُقذف إلى الجهة الأخرى حين يحاول الانزلاق عليه.
المطلوب
اكتب hits(a, b) لمستطيلين { x, y, w, h }: تُرجع true إن تداخلا وfalse غير ذلك، والتلامس وحده false. الدالة move جاهزة، وتعتمد عليها لتوقف اللاعب عند الجدران. للتجربة انقر المعاينة ثم حرّك بالأسهم.
معايير التصحيح
6 معايير- المتداخلان يتصادمان
- المنفصلان على أي محور لا يتصادمان
- التلامس على حافّة ليس تصادمًا
- الصغير داخل الكبير تصادم من الجهتين
- move توقف اللاعب ملاصقًا للجدار
- والملاصق ينزلق على الجدار