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