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