تعرض شاشة التلفزيون عددًا من الاعتبارات التي قد تكون جديدة على مطوّري الألعاب على الأجهزة الجوّالة وتشمل هذه الاعتبارات حجم الشاشة الكبير ونظام التحكّم فيها وحقيقة أنّ جميع اللاعبين يشاهدونها في آن واحد.
الشاشة
عند تطوير الألعاب لشاشة التلفزيون، يجب مراعاة أمرين رئيسيين: تصميم لعبتك للعرض في الوضع الأفقي وتوفير دعم وقت الاستجابة السريع.
دعم العرض في الوضع الأفقي
يكون التلفزيون دائمًا في وضع أفقي، ولا يمكنك تدويره وليس هناك وضع عمودي. صمِّم ألعاب التلفزيون دائمًا لعرضها في الوضع الأفقي.
وضع وقت الاستجابة السريع التلقائي
يمكن لبعض شاشات العرض إجراء معالجة لاحقة للرسومات. تحسّن هذه المعالجة اللاحقة جودة الرسومات ولكنها قد تزيد وقت الاستجابة. تتضمّن شاشات العرض الأحدث التي تتيح استخدام HDMI 2.1 وضع وقت الاستجابة السريع التلقائي (ALLM)، ما يقلّل وقت الاستجابة عن طريق إيقاف هذه المعالجة اللاحقة. لمزيد من التفاصيل حول وضع وقت الاستجابة السريع التلقائي، يُرجى الرجوع إلى مواصفات HDMI 2.1. قد تتيح شاشات العرض الأخرى دعم وضع الألعاب بسلوك مشابه.
في الإصدار 11 من Android والإصدارات الأحدث، يمكن لنافذة طلب استخدام وضع وقت الاستجابة السريع التلقائي أو وضع الألعاب ، إذا كانا متاحَين، عن طريق طلب معالجة لاحقة قليلة. ويُعدّ هذا مفيدًا بشكل خاص لتطبيقات الألعاب والمؤتمرات المرئية، حيث يكون وقت الاستجابة السريع أكثر أهمية من الحصول على أفضل الرسومات الممكنة.
لتفعيل المعالجة اللاحقة القليلة أو إيقافها، يمكنك استدعاء
Window.setPreferMinimalPostProcessing(),
أو ضبط السمة
preferMinimalPostProcessing
للنافذة على true. لا تتيح بعض شاشات العرض المعالجة اللاحقة القليلة. لمعرفة ما إذا كانت شاشة عرض معيّنة تتيحها، يمكنك استدعاء الطريقة Display.isMinimalPostProcessingSupported().
أجهزة الإدخال
لا تتضمّن أجهزة التلفزيون واجهات تعمل باللمس، لذا من المهم جدًا ضبط عناصر التحكّم والتأكّد من أنّ اللاعبين سيجدونها سهلة الاستخدام وممتعة. يؤدي التعامل مع وحدات التحكّم أيضًا إلى ظهور بعض المشاكل الأخرى التي يجب الانتباه إليها، مثل تتبُّع وحدات تحكّم متعددة والتعامل مع حالات الانقطاع بسلاسة. يجب أن تتعامل جميع تطبيقات التلفزيون، بما في ذلك الألعاب، مع وحدات التحكّم بشكل متّسق. لمزيد من المعلومات حول استخدام وحدات التحكّم في التلفزيون، يُرجى الاطّلاع على مقالة إدارة وحدات التحكّم في التلفزيون، ولمعرفة معلومات محدّدة حول استخدام وحدات التحكّم في التلفزيون للألعاب، يُرجى الاطّلاع على مقالة التعامل مع وحدات التحكّم في الألعاب.
تخطيطات لوحة المفاتيح
في الإصدار 13 من Android (المستوى 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 لتسجيل الدخول إلى خدمات وسائل التواصل الاجتماعي.
الاتصال بالشبكات
تحتاج الألعاب في كثير من الأحيان إلى نطاق ترددي أكبر لتوفير الأداء الأمثل، ويفضّل العديد من المستخدمين استخدام الإيثرنت بدلاً من شبكة Wi-Fi لتوفير هذا الأداء. يجب أن يتحقّق تطبيقك من اتصالات Wi-Fi والإيثرنت. إذا كان تطبيقك مخصّصًا للتلفزيون فقط، ليس عليك التحقّق من خدمة شبكة الجيل الثالث أو LTE كما تفعل في تطبيق الأجهزة الجوّالة.