الدرس 7 من 10

متّجهات بالجداول الوصفية

هدف الدرس

pos + vel * dt كما في الرياضيات

01

الشرح

الموضع والسرعة والقوّة في لعبة ثنائية الأبعاد كلها أزواج x, y. وحين تكتبها أرقامًا منفصلة يتضاعف كل سطر: x = x + vx * dt ثم مثله لـy. والجدول الوصفي يعلّم الجدول المعاملات الحسابية: عرّف فيه __add فيصير a + b استدعاءً لها، وتكتب pos = pos + vel * dt كما في الرياضيات. هكذا يعمل Vector2 في Roblox وvector2 في FiveM.

و__mul تُنادى أيًّا كان موضع الرقم: v * 2 تصلها (v, 2)، و2 * v تصلها (2, v)، فانظر أيّ الطرفين هو الرقم. وكل معامل يُرجع متّجهًا جديدًا ولا يعدّل طرفيه، وإلا تحرّك الموضع الأصلي كلما حسبت منه نقطة.

والفخّ في normalize: قسمة المتّجه الصفري على طوله هي 0 / 0، وهذه في Lua لا ترمي خطأ بل تعطي NaN. تنتشر NaN إلى الموضع، وكل مقارنة معها كاذبة، فيختفي الكيان من الخريطة ولا يصطدم بشيء. احرس الطول الصفري وأرجِع متّجهًا صفريًّا.

02

المطلوب

أكمل Vector2: المعاملات __add و__sub، و__mul لضرب المتّجه في رقم من أي جهة، والدوال length() وnormalize() (طول ناتجها واحد، أو صفري للصفري) وVector2.distance(a, b). وكل ما يُرجع متّجهًا يُرجعه جديدًا بالجدول الوصفي نفسه.

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

6 معايير
  1. + و - مركّبةً بمركّبة
  2. الضرب في رقم من الجهتين
  3. الناتج متّجه جديد والأصل لا يتغيّر
  4. length و distance
  5. normalize طوله واحد واتّجاهه نفسه
  6. normalize للمتّجه الصفري صفري لا NaN
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

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

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