الدرس 2 من 10
حالة المفاتيح
- 14 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
تتبّع المفاتيح المضغوطة في كل إطار
الشرح
أول ما يخطر لك غالبًا أن تحرّك اللاعب داخل مستمع keydown، وهذه طريقة خاطئة، لأن هذا الحدث يصل مرّة ثم يتوقّف نحو نصف ثانية ثم يتكرّر بسرعة يحدّدها نظام التشغيل لا لعبتك، فتتقطّع الحركة ولا يتكرّر إلا آخر مفتاح ضغطته.
ولهذا تفصل الألعاب بين الأمرين، فالمستمعان يسجّلان المفاتيح المضغوطة الآن في الكائن keys، فيضعان true عند keydown وfalse عند keyup، ثم تقرأ الحلقة هذه الحالة في كل إطار وتحرّك اللاعب باستعمال dt.
وانتبه إلى الحركة القطرية، فإذا ضغط اللاعب السهمين الأيمن والأسفل معًا تحرّك خطوة كاملة على كل محور، فيقطع في الاتجاه القطري √2 ضعف ما يقطعه في خط مستقيم، أي أنه يصبح أسرع بنحو 41%. والحلّ أن تقسم متّجه الاتجاه على طوله Math.hypot(dx, dy) قبل أن تضربه في السرعة.
المطلوب
املأ keys من الحدثين keydown وkeyup على window مستعملًا اسم المفتاح e.key، ثم اكتب applyInput(player, keys, dt) بحيث تحرّك الأسهم الأربعة اللاعب بسرعة player.speed بكسل في الثانية، ويُنقص السهم الأعلى قيمة y، وتكون الحركة القطرية بطول الحركة المستقيمة نفسه. ولتجرّب ذلك انقر على المعاينة ثم حرّك اللاعب بالأسهم.
الفحوص
5 فحوص- الحدث keydown يسجّل المفتاح في keys
- الحدث keyup يُرجع المفتاح إلى false
- السهم الأيمن يحرّك اللاعب بمقدار speed × dt
- السهم الأعلى يُنقص y
- الحركة القطرية ليست أسرع من المستقيمة