الدرس 8 من 10

كشف التصادم

هدف الدرس

مستطيلات ودوائر وحالة التلامس

01

الشرح

أغلب الألعاب لا تفحص التصادم بشكل الشخصية الحقيقي، بل بشكل بسيط يحيط بها: مستطيل موازٍ للمحورين (AABB) أو دائرة. فيصير الفحص بضع مقارنات، يحتمل آلاف الكيانات في كل إطار.

والمستطيلان يتداخلان حين يتداخل مداهما على x وعلى y معًا، فالفصل على محور واحد يكفي ليفترقا. ولا تبحث عن زاوية أحدهما داخل الآخر: مستطيلان على شكل صليب يتقاطعان ولا زاوية لأيّهما داخل صاحبه. والدائرتان تتداخلان حين تقلّ المسافة بين مركزيهما عن مجموع نصفي قطريهما، وقارن المربّعات فتستغني عن math.sqrt.

والفخّ عند الحافّة: جدار يبدأ حيث ينتهي اللاعب تمامًا، أهما متصادمان؟ من يكتب <= يجعل التلامس تصادمًا، فيصطدم اللاعب بالأرض التي يقف عليها في كل إطار، ويعلق عند الحدّ بين بلاطتين متجاورتين. والقاعدة هنا صريحة: التلامس ليس تداخلًا، والمقارنات كلها صارمة.

02

المطلوب

اكتب aabbOverlap(a, b) لمستطيلين { x, y, w, h } حيث x, y الزاوية العليا اليسرى، وcirclesOverlap(a, b) لدائرتين { x, y, r }. كلتاهما تُرجع true للتداخل، وfalse للتلامس والتباعد.

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

6 معايير
  1. مستطيلان متداخلان جزئيًّا
  2. الفصل على محور واحد يكفي
  3. تقاطع الصليب تداخل
  4. التلامس عند الحافّة ليس تداخلًا
  5. الدائرتان تُقاسان بالمسافة لا بالمحاور
  6. الدائرتان المتلامستان لا تتداخلان
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

يبدأ الفحص حين تجهز البيئة.

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