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