מסך הטלוויזיה מציג מספר שיקולים שעשויים להיות חדשים למפתחי משחקים לנייד. המאפיינים האלה כוללים את הגודל הגדול של המסך, את תוכנית הבקרה ואת העובדה שכל השחקנים צופים בו בו-זמנית.
מסך
כשמפתחים משחקים למסך הטלוויזיה, חשוב לזכור שני דברים עיקריים: לתכנן את המשחק כך שיוצג לרוחב ולספק תמיכה בהשהיה נמוכה.
תמיכה בתצוגה לרוחב
הטלוויזיה תמיד מוצבת לרוחב: אי אפשר לסובב אותה, ואין אפשרות להצגה לאורך. תמיד צריך לעצב את המשחקים לטלוויזיה כך שיוצגו בפריסה לרוחב.
מצב זמן אחזור נמוך אוטומטי
במסכים מסוימים אפשר לבצע עיבוד שלאחר יצירת הגרפיקה. העיבוד הזה משפר את איכות הגרפיקה, אבל עלול להגדיל את זמן האחזור. במסכים חדשים יותר שתומכים ב-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 בהתאמה. עכשיו אפשר ליצור handlers של אירועים מרכזיים עבור קודי המקשים האלה ולהטמיע את ההתנהגות הצפויה.
מניפסט
יש כמה דברים מיוחדים שמשחקים צריכים לכלול במניפסט של 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.
מתבצעת שמירה
אפשר להשתמש ב-Saved Games ב-Google Play Services כדי לאחסן את השמירה של המשחק. המשחק צריך לקשר את השמירות לחשבון Google ספציפי, כדי שיהיה אפשר לזהות אותן באופן ייחודי גם במכשירים שונים: בין אם השחקן משתמש בטלפון או בטלוויזיה, המשחק צריך להיות מסוגל לשלוף את פרטי השמירה מאותו חשבון משתמש.
בנוסף, צריך לספק אפשרות בממשק המשתמש של המשחק כדי לאפשר לשחקן למחוק נתונים שמאוחסנים באופן מקומי ובענן. אפשר להוסיף את האפשרות למסך Settings של המשחק. פרטים ספציפיים על הטמעה של משחקים שמורים באמצעות Play Services זמינים במאמר משחקים שמורים ב-Android.
יציאה
צריך לספק רכיב עקבי וברור בממשק המשתמש שמאפשר למשתמש לצאת מהמשחק בצורה חלקה. צריכה להיות גישה לרכיב הזה באמצעות לחצני הניווט של מקשי החיצים. עדיף לעשות את זה במקום להסתמך על כפתור הבית כדי לצאת, כי הוא לא עקבי ולא אמין בשלטים שונים.
אינטרנט
אל תפעילו גלישה באינטרנט במשחקים ל-Android TV. אין תמיכה בדפדפן אינטרנט ב-Android TV.
הערה: אפשר להשתמש במחלקה WebView כדי להתחבר לשירותי מדיה חברתית.
רשתות
למשחקים נדרש בדרך כלל רוחב פס גדול יותר כדי לספק ביצועים אופטימליים, ומשתמשים רבים מעדיפים חיבור Ethernet על פני חיבור Wi-Fi כדי לקבל את הביצועים האלה. האפליקציה צריכה לבדוק חיבורים ל-Wi-Fi ולאתרנט. אם האפליקציה מיועדת לטלוויזיה בלבד, לא צריך לבדוק אם יש שירות 3G/LTE כמו באפליקציה לנייד.