تقدّم شاشة التلفزيون عددًا من الاعتبارات التي قد تكون جديدة على مطوّري الألعاب على الأجهزة الجوّالة. وتشمل هذه الاعتبارات حجم الشاشة الكبير ونظام التحكّم فيها وحقيقة أنّ جميع اللاعبين يشاهدونها في آن واحد.
الشاشة
عند تطوير الألعاب لشاشة التلفزيون، يجب مراعاة نقطتين رئيسيتَين: تصميم لعبتك للعرض في الوضع الأفقي وتوفير دعم لوقت الاستجابة السريع.
دعم العرض في الوضع الأفقي
يكون التلفزيون دائمًا في وضع أفقي، ولا يمكنك تدويره وليس هناك وضع عمودي. يجب دائمًا تصميم ألعاب التلفزيون لعرضها في الوضع الأفقي.
وضع وقت الاستجابة السريع التلقائي
يمكن لبعض شاشات العرض إجراء معالجة لاحقة للرسومات. تحسّن هذه المعالجة اللاحقة جودة الرسومات ولكنها قد تزيد من وقت الاستجابة. تتضمّن شاشات العرض الأحدث التي تتوافق مع HDMI 2.1 وضع وقت الاستجابة السريع التلقائي (ALLM)، الذي يقلّل وقت الاستجابة إلى أدنى حد من خلال إيقاف هذه المعالجة اللاحقة. لمزيد من التفاصيل حول 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 كما تفعل في تطبيق الأجهزة الجوّالة.