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

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

الشاشة

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

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

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

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

يمكن لبعض الشاشات تنفيذ معالجة ما بعد معالجة الرسومات. تؤدي هذه المعالجة اللاحقة إلى تحسين الرسومات ذي جودة عالية ولكن قد يزيد من زمن الانتقال درجة حرارة منخفضة تلقائيًا للشاشات التي تتوافق مع 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 كما تريد لتطبيق هاتف محمول.