Summary

  • أتاحت مسودة Gamepad العامة الأولى عام 2012 للألعاب قراءة الأزرار والمحاور مباشرة. تقمص الذراع دور لوحة المفاتيح أو الفأرة كان يفقده دقة الحركة ويستلزم برنامجًا إضافيًا.
  • تجعل مسودة W3C لعام 2025 قائمة navigator.getGamepads() فارغة حتى تُرصد حركة حقيقية في ذراع اللعب. تحد هذه الخطوة من اكتشاف الأجهزة بصمت، مع بقاء Permissions Policy وحالة المستند شرطين منفصلين.

يستطيع زناد الذراع أن يكون مضغوطًا إلى النصف. تستطيع العصا أن تميل قليلًا إلى اليسار. أما لوحة المفاتيح فغالبًا لا تعرف سوى «ضُغط» و«لم يُضغط»؛ والفأرة مترجم مرتبك لعجلة قيادة. جاءت المسودة العامة الأولى التي نشرها W3C في مايو 2012 لتنهي هذا التنكر. أعطت النص البرمجي المحاور والأزرار ومعرّف الجهاز وفهرسه والطابع الزمني وأحداث الاتصال والانفصال. صار بإمكان اللعبة أن تسأل الذراع بلغته بدل أن تطلب منه ارتداء بدلة موظف مكتب.

كان المجال العددي هو الحيلة النافعة: يمتد المحور من -1 إلى 1، ويتدرج الزر من 0 إلى 1. نصف ضغطة يظل نصف ضغطة. يساعد id التطبيق على التعرف إلى نوع الجهاز، ويميز الفهرس أذرع عدة حول شاشة واحدة. حين يجلس أربعة على الأريكة ويوقف أحدهم اللعبة، يفيد أن تعرف من ضغط الزر. لكن هذه القائمة نفسها تكشف شيئًا عن معدات الزائر. الصفحة التي تقرؤها قبل بدء اللعب تجري جردًا صغيرًا لشخص قد لا يريد اللعب أصلًا.

يمكن للاعب أن يتولى التعارف بنفسه. تقول مسودة W3C المؤرخة 10 يوليو 2025 إن navigator.getGamepads() تعيد قائمة فارغة إلى أن يرصد المتصفح حركة مستخدم على ذراع لعب. يذكر النص مقاومة البصمة الرقمية سببًا لذلك. قد يكون الجهاز موصولًا، لكن الصفحة لا تحصل بعد على بطاقة تعريفه. ضغطة زر مقصودة أو تحريك عصا كانت ساكنة يبدأ الحديث من جهة اللاعب، لا من فضول الموقع.

حتى جرس الباب يحتاج إلى التمييز بين إصبع ضاغط ونابض مرتخٍ. بعض المفاتيح تبقى في وضع التشغيل، وبعض العصي ترتجف قليلًا قرب المركز. لا ينبغي لأي منهما أن يقدم صاحبه إلى كل صفحة مفتوحة. لذلك تصف المسودة انتقالًا من حالة حيادية: زر كان غير مضغوط فيُضغط، أو محور كان قريبًا من موضع راحته فيتجاوز عتبة محددة. العطل الصغير ليس تحية بشرية.

وهناك أبواب أخرى في النص. المستند غير النشط تمامًا يحصل على قائمة فارغة. وإذا منعت Permissions Policy ميزة gamepad، ترمي getGamepads() خطأ SecurityError. الحركة تحدد وقت ظهور الجهاز للنص البرمجي؛ وهي ليست تصريحًا شاملًا لكل إطار مضمّن. يحدد المتصفح أي مستند يحق له استعمال الميزة، وتحدد اللعبة معنى الأزرار، ويختار اللاعب لحظة بدء العلاقة.

بعد التعارف تحتاج اللعبة إلى قراءات حديثة. تعرض getGamepads() الأذرع المتصلة التي حدث تفاعل معها، وتضع null في الفهارس التي خلت من جهاز. تخبر الأحداث بوصول الذراع أو رحيله. وقد يُستعمل الفهرس الفارغ مرة أخرى بعد فصل جهاز؛ إنه أداة تنظيم، لا اسم أبدي. تنقل قيم الأزرار والمحاور العمل الفوري: قفزة، انعطاف، فرملة، أو تصفح واجهة من الأريكة. الواجهة البرمجية تسلم الحركة؛ أما قصة اللعبة فتكتبها اللعبة.

يمتد سجل منشورات W3C من مسودة 2012 إلى نص 2025. هذه تواريخ الوثائق، وليست مواعيد تبنٍّ موحدة لكل المتصفحات. تكفي القصة من دون ادعاء يوم إطلاق واحد: احتاجت الألعاب إلى قراءة أمينة للذراع، ولم تكن الصفحات الخاملة بحاجة إلى سجل حضور للأجهزة المتصلة.

يضغط اللاعب زرًا أخيرًا، فتتحرك الشخصية. فتح المتصفح الباب بعدما دقت اليد التي تحمل الذراع الجرس.