تصميم ألعاب تلفزيونية

تعرض شاشة التلفزيون عددًا من الاعتبارات التي قد تكون جديدة بالنسبة إلى الألعاب على الأجهزة الجوّالة المطورين. وتشمل هذه المناطق حجمها الكبير ونظام التحكّم فيها وكون جميع اللاعبين يشاهدونها في الوقت نفسه.

الشاشة

هناك شيئان رئيسيان يجب وضعهما في الاعتبار عند تطوير ألعاب لشاشة التلفزيون هما تصميم لعبتك في الاتجاه الأفقي وتوفير الدعم لوقت الاستجابة البطيء.

دعم العرض الأفقي

يكون التلفزيون دائمًا بالوضع الأفقي: لا يمكنك تحويله، ولا يتوفّر وضع عمودي. يجب تصميم ألعاب التلفزيون دائمًا بحيث يتم عرضها في الوضع الأفقي.

وضع وقت الاستجابة السريع التلقائي

يمكن لبعض الشاشات إجراء معالجة لاحقة للرسومات. تؤدي هذه المعالجة اللاحقة إلى تحسين الرسومات ذي جودة عالية ولكن قد يزيد من زمن الانتقال درجة حرارة منخفضة تلقائيًا للشاشات التي تتوافق مع HDMI 2.1 وضع وقت الاستجابة (ALLM)، الذي يقلّل من وقت الاستجابة عن طريق إيقاف المعالجة اللاحقة. بالنسبة مزيد من التفاصيل حول ALLM، يُرجى مراجعة مواصفات HDMI 2.1: مشاكل أخرى أجهزة العرض المتوافقة مع وضع الألعاب بسلوك مشابه.

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

لتفعيل الحد الأدنى من المعالجة اللاحقة أو إيقافه، اتصل بالرقم Window.setPreferMinimalPostProcessing()، أو اضبط سمة preferMinimalPostProcessing للنافذة على true. لا تتيح بعض الشاشات الحد الأدنى من المعالجة اللاحقة. لمعرفة ما إذا كانت شاشة معيّنة تتيح ذلك، يمكنك استدعاء الأسلوب Display.isMinimalPostProcessingSupported().

أجهزة إدخال البيانات

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

تخطيطات لوحة المفاتيح

في نظام التشغيل Android 13 (المستوى 33) والإصدارات الأحدث، يمكنك تحديد تنسيقات لوحة المفاتيح باستخدام getKeyCodeForKeyLocation() على سبيل المثال، تتيح لعبتك الحركة باستخدام مفاتيح WASD، ولكن قد لا تعمل هذه الميزة بشكل صحيح على أجهزة لوحة مفاتيح AZERTY تشتمل على المفتاحين A وW في أماكن مختلفة. يمكنك الحصول على رموز المفاتيح للمفاتيح التي تتوقّع ظهورها في مواضع معيّنة:

Kotlin

val inputManager: InputManager? = requireActivity().getSystemService()

inputManager?.inputDeviceIds?.map { inputManager.getInputDevice(it) }
    ?.firstOrNull { it.keyboardType == InputDevice.KEYBOARD_TYPE_ALPHABETIC }
    ?.let { inputDevice ->
        keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W)
        keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A)
        keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S)
        keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D)
    }

Java

InputManager inputManager = requireActivity().getSystemService(InputManager.class);
InputDevice inputDevice = Arrays.stream(inputManager.getInputDeviceIds())
        .mapToObj(inputManager::getInputDevice)
        .filter( device -> device.getKeyboardType() == InputDevice.KEYBOARD_TYPE_ALPHABETIC)
        .filter(Objects::nonNull)
        .findFirst()
        .orElse(null);
if (inputDevice != null) {
    keyUp = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_W);
    keyLeft = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_A);
    keyDown = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_S);
    keyRight = inputDevice.getKeyCodeForKeyLocation(KeyEvent.KEYCODE_D);
}

في هذا المثال، عند استخدام لوحة مفاتيح AZERTY، يتم ضبط keyUp على تم ضبط KeyEvent.KEYCODE_Z، keyLeft على KeyEvent.KEYCODE_Q، بينما تم ضبط keyDown وkeyRight على KeyEvent.KEYCODE_S وKeyEvent.KEYCODE_D على التوالي. يمكنك الآن إنشاء معالِجات أحداث رئيسية لهذه الرموز الرئيسية وتنفيذ السلوك المتوقّع.

البيان

هناك بعض الميزات الخاصة التي يجب أن تتضمّنها الألعاب في بيان Android.

عرض لعبتك على الشاشة الرئيسية

تعرض الشاشة الرئيسية في Android TV الألعاب في صف منفصل عن التطبيقات العادية. لإظهار لعبتك في قائمة الألعاب، عليك ضبط android:isGame إلى "true" في بيان التطبيق <application> مثلاً:

<application
    ...
    android:isGame="true"
    ...
>

إعلان إتاحة وحدات التحكّم في الألعاب

قد لا تكون أجهزة التحكّم في الألعاب متاحة أو مفعّلة لمستخدمي أجهزة التلفزيون. لإعلام المستخدمين بشكلٍ سليم بأنّ لعبتك متوافقة مع جهاز تحكّم في الألعاب، يجب تضمين الإدخال التالي فيملف بيان التطبيق:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

ملاحظة: عند تحديد توافق android:hardware:gamepad، لا تضبط سمة android:required على "true". في حال إجراء ذلك، لن يتمكّن المستخدمون من تثبيت تطبيقك على أجهزة التلفزيون.

لمزيد من المعلومات عن إدخالات البيان، يُرجى الاطّلاع على بيان التطبيق.

خدمات ألعاب Google Play

إذا كانت لعبتك تتضمّن خدمات ألعاب Google Play، يجب أن تضع في اعتبارك عددًا من الاعتبارات المتعلقة بالإنجازات وتسجيل الدخول وحفظ الألعاب.

الإنجازات

يجب أن تتضمّن لعبتك خمسة إنجازات (قابلة للتحقيق) على الأقل. مستخدم فقط يتحكم في أسلوب اللعب من جهاز إدخال متوافق لتحقيق الإنجازات. لمزيد من المعلومات عن إنجازاتك وكيفية تنفيذها، راجع الإنجازات في Android.

تسجيل الدخول

يجب أن تحاول لعبتك تسجيل دخول المستخدم عند التشغيل. إذا رفض اللاعب تسجيل الدخول عدة مرات متتالية، من المفترض أن تتوقّف اللعبة عن طلب ذلك. اطّلِع على مزيد من المعلومات حول تسجيل الدخول في مقالة تنفيذ تسجيل الدخول على Android.

جارٍ الحفظ…

استخدام الألعاب المحفوظة في "خدمات Google Play" لتخزين إنقاذ اللعبة. يجب أن تربط لعبتك عمليات حفظ اللعبة بحساب محدّد على Google، وذلك يمكن التعرف عليها بشكل فريد حتى عبر الأجهزة: فسواء كان المشغل يستخدم الهاتف المحمول أو التلفزيون، يجب أن تكون اللعبة قادرة على سحب معلومات حفظ اللعبة من حساب المستخدم نفسه.

يجب أيضًا توفير خيار في واجهة المستخدم للّعبة يسمح للّاعب بالحذف محليًا البيانات المخزنة على السحابة الإلكترونية. يمكنك وضع الخيار في شاشة Settings الخاصة باللعبة. للاطّلاع على تفاصيل حول تنفيذ ميزة "حفظ التقدم في الألعاب" باستخدام "خدمات Play"، يُرجى الاطّلاع على مقالة الألعاب المحفوظة في Android.

الخروج

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

الويب

لا تفعِّل ميزة تصفُّح الويب في ألعاب Android TV. لا يتوافق Android TV مع متصفح الويب.

ملاحظة: يمكنك استخدام فئة WebView لعمليات تسجيل الدخول إلى خدمات وسائل التواصل الاجتماعي.

اتصال بالشبكات

كثيرًا ما تحتاج الألعاب إلى معدل نقل بيانات أعلى لتوفير الأداء الأمثل، ويفضّلها العديد من المستخدمين من Ethernet إلى Wi-Fi لتقديم هذا الأداء. يجب أن يتحقق التطبيق من وجود شبكة Wi-Fi والإيثرنت على حد سواء. الاتصالات. إذا كان تطبيقك مخصّصًا للتلفزيون فقط، ليس عليك التحقّق من توفّر خدمة الجيل الثالث/LTE كما هو الحال مع التطبيقات المخصّصة للأجهزة الجوّالة.