מסך הטלוויזיה מציג מספר שיקולים שעשויים להיות חדשים למפתחי משחקים לנייד. המאפיינים האלה כוללים את הגודל הגדול של המסך, את תוכנית הבקרה והעובדה שכל השחקנים צופים בו בו-זמנית.
תצוגה
כשמפתחים משחקים למסך הטלוויזיה, חשוב לזכור שני דברים עיקריים: לתכנן את המשחק כך שיוצג בכיוון לרוחב ולספק תמיכה בהשהיה נמוכה.
תמיכה בתצוגה לרוחב
הטלוויזיה תמיד מוצבת לרוחב: אי אפשר לסובב אותה, ואין אפשרות להצגה לאורך. תמיד צריך לעצב את המשחקים לטלוויזיה כך שיוצגו בפריסה לרוחב.
מצב זמן אחזור נמוך אוטומטי
במסכים מסוימים אפשר לבצע עיבוד שלאחר יצירת הגרפיקה. העיבוד שאחרי השיפור הזה משפר את איכות הגרפיקה, אבל עלול להגדיל את זמן האחזור. במסכים חדשים יותר שתומכים ב-HDMI 2.1 יש מצב השהיה אוטומטית נמוכה (ALLM), שממזער את ההשהיה על ידי השבתת העיבוד הזה. פרטים נוספים על ALLM זמינים במפרט של HDMI 2.1. יכול להיות שבמסכים אחרים יש תמיכה במצב משחק עם התנהגות דומה.
ב-Android 11 ואילך, חלון יכול לבקש להשתמש במצב אוטומטי של זמן אחזור קצר או במצב משחק, אם הם זמינים, על ידי בקשת עיבוד מינימלי לאחר העיבוד. האפשרות הזו שימושית במיוחד באפליקציות של משחקים ושיחות ועידה בווידאו, שבהן חביון נמוך חשוב יותר מגרפיקה באיכות הכי גבוהה שאפשר.
כדי להפעיל או להשבית את העיבוד המינימלי שאחרי השיחה, מתקשרים אל
Window.setPreferMinimalPostProcessing(),
או מגדירים את המאפיין
preferMinimalPostProcessing
של החלון לערך true. לא כל המסכים תומכים בעיבוד מינימלי אחרי העיבוד הראשוני. כדי לברר אם מסך מסוים תומך בעיבוד מינימלי אחרי העיבוד הראשוני, צריך להפעיל את השיטה Display.isMinimalPostProcessingSupported().
התקני קלט
למכשירי טלוויזיה אין ממשקי מגע, ולכן חשוב עוד יותר להגדיר את אמצעי הבקרה בצורה נכונה ולוודא שהשחקנים ימצאו אותם אינטואיטיביים ומהנים לשימוש. הטיפול בשלטים מעלה גם כמה בעיות אחרות שצריך לשים לב אליהן, כמו מעקב אחרי כמה שלטים וטיפול נינוח בניתוקים. כל האפליקציות לטלוויזיה, כולל משחקים, צריכות לטפל בשלטים באופן עקבי. מידע נוסף על שימוש בבקרי טלוויזיה זמין במאמר ניהול בקרי טלוויזיה. מידע ספציפי על שימוש בבקרי טלוויזיה למשחקים זמין במאמר שימוש בבקרים למשחקים.
פריסות מקלדת
ב-Android 13 (רמת API 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 מוגדר ל-KeyEvent.KEYCODE_S והערך של keyRight מוגדר ל-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 Games Services
אם המשחק שלכם משולב עם שירותי המשחקים של Google Play, כדאי לזכור כמה דברים שקשורים להישגים, לכניסה ולשמירת משחקים.
הישגים
המשחק צריך לכלול לפחות חמישה הישגים (שניתן להשיג). רק משתמש ששולט במשחק באמצעות מכשיר קלט נתמך יכול לזכות בהישגים. מידע נוסף על הישגים ועל הטמעה שלהם זמין במאמר הישגים ב-Android.
כניסה
המשחק צריך לנסות להכניס את המשתמש לחשבון כשהוא מופעל. אם השחקן דוחה את הכניסה לחשבון כמה פעמים ברציפות, המשחק צריך להפסיק לבקש ממנו להיכנס. מידע נוסף על כניסה זמין במאמר בנושא הטמעת כניסה ב-Android.
מתבצעת שמירה
משתמשים ב-Saved Games (משחקים שמורים) ב-Google Play Services כדי לאחסן את השמירה של המשחק. המשחק צריך לקשר את השמירות לחשבון Google ספציפי, כדי שיהיה ניתן לזיהוי מובהק גם במכשירים שונים: בין אם השחקן משתמש בטלפון נייד או בטלוויזיה, המשחק צריך להיות מסוגל לשלוף את פרטי השמירה מאותו חשבון משתמש.
כדאי גם לספק אפשרות בממשק המשתמש של המשחק שתאפשר לשחקן למחוק נתונים ששמורים באופן מקומי ובענן. אפשר להוסיף את האפשרות למסך Settings של המשחק. לפרטים ספציפיים על הטמעה של משחקים שמורים באמצעות Play Services, אפשר לעיין במאמר משחקים שמורים ב-Android.
יציאה
צריך לספק רכיב בממשק המשתמש עקבי וברור שמאפשר למשתמש לצאת מהמשחק בצורה חלקה. צריכה להיות גישה לרכיב הזה באמצעות לחצני הניווט של לחצני החיצים (D-pad). עדיף לעשות את זה במקום להסתמך על כפתור הבית כדי לצאת, כי הוא לא עקבי ולא אמין בשלטים שונים.
אינטרנט
אל תפעילו גלישה באינטרנט במשחקים ל-Android TV. אין תמיכה בדפדפן אינטרנט ב-Android TV.
הערה: אפשר להשתמש במחלקה WebView כדי להתחבר לשירותי מדיה חברתית.
Networking
למשחקים נדרש בדרך כלל רוחב פס גדול יותר כדי לספק ביצועים אופטימליים, ומשתמשים רבים מעדיפים חיבור Ethernet על פני חיבור Wi-Fi כדי לקבל את הביצועים האלה. האפליקציה צריכה לבדוק חיבורים ל-Wi-Fi ולאתרנט. אם האפליקציה מיועדת לטלוויזיה בלבד, לא צריך לבדוק אם יש שירות 3G/LTE כמו באפליקציה לנייד.