מסך הטלוויזיה מציג מספר שיקולים שעשויים להיות חדשים למפתחי משחקים לנייד. הבעיות האלה כוללות את הגודל הגדול של המסך, את תוכנית הבקרה והעובדה שכל השחקנים צופים בו בו-זמנית.
מסך
יש שני דברים עיקריים שצריך לזכור כשמפתחים משחקים למסך הטלוויזיה: עיצוב המשחק לשימוש במצב לרוחב ומתן תמיכה בהשהיה נמוכה.
תמיכה בתצוגה לרוחב
הטלוויזיה תמיד מוצבת לרוחב: אי אפשר לסובב אותה, ואין אפשרות להצגה לאורך. תמיד צריך לעצב את המשחקים לטלוויזיה כך שיוצגו בפריסה לרוחב.
מצב זמן אחזור נמוך אוטומטי
במסכים מסוימים אפשר לבצע עיבוד אחרי של גרפיקה. העיבוד הזה משפר את איכות הגרפיקה, אבל עלול להגדיל את זמן האחזור. במסכים חדשים יותר שתומכים ב-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 ו-keyRight מוגדרים ל-KeyEvent.KEYCODE_S ו-KeyEvent.KEYCODE_D בהתאמה. עכשיו אפשר ליצור מטפלים באירועים מרכזיים עבור קודי המקשים האלה וליישם את ההתנהגות הצפויה.
מניפסט
יש כמה דברים מיוחדים שמשחקים צריכים לכלול במניפסט של Android.
הצגת המשחק במסך הבית
במסך הבית של Android TV, המשחקים מוצגים בשורה נפרדת מהאפליקציות הרגילות.
כדי שהמשחק יופיע ברשימת המשחקים, צריך להגדיר את המאפיין
android:isGame בתג <application>
במניפסט של האפליקציה לערך "true". לדוגמה:
<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 כמו באפליקציה לנייד.