בניית משחקי טלוויזיה

במסך הטלוויזיה מוצגים מספר שיקולים שעשויים להיות חדשים במשחק לנייד מפתחים. האזורים האלה כוללים את גודלו, את ערכת הבקרה שלו ואת העובדה שכל השחקנים צופים בו בו-זמנית.

מסך

שני הדברים העיקריים שכדאי לזכור כשמפתחים משחקים למסך הטלוויזיה הם עיצוב את המשחק לפריסה לרוחב ולספק תמיכה לזמן אחזור נמוך.

תמיכה בתצוגה לרוחב

הטלוויזיה תמיד בכיוון הנכון: לא ניתן לסובב אותה, ואין כיוון לאורך. עיצוב תמיד המשחקים שלך בטלוויזיה יוצגו בפריסה לרוחב.

מצב אוטומטי של זמן אחזור קצר

במסכים מסוימים אפשר לעבד את הגרפיקה לאחר עיבוד. העיבוד הזה משפר את הגרפיקה איכות מסוימת, אבל היא עשויה להאריך את זמן האחזור. צגים חדשים יותר שתומכים ב-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.

יציאה

יש לספק רכיב עקבי וברור בממשק המשתמש שמאפשר למשתמש לצאת מהמשחק בצורה חלקה. אפשר לגשת לאלמנט הזה באמצעות לחצני הניווט של D-pad. עשו זאת במקום להסתמך לחצן דף הבית שנועד לספק יציאה כי היא לא עקבית או לא מהימנה בבקרים שונים.

אינטרנט

אין להפעיל את הגלישה באינטרנט במשחקים ל-Android TV. ב-Android TV אין תמיכה בדפדפן אינטרנט.

הערה: תוכלו להשתמש במחלקה WebView לצורך התחברות כדי: שירותי מדיה חברתית.

רשתות

לעיתים קרובות למשחקים נדרש רוחב פס גדול יותר כדי לספק ביצועים אופטימליים, והרבה משתמשים מעדיפים אתרנט ל-Wi-Fi כדי לספק את הביצועים האלה. האפליקציה צריכה לבדוק אם יש חיבור ל-Wi-Fi וגם לאתרנט בחיבורים. אם האפליקציה מיועדת לטלוויזיה בלבד, אין צורך לבדוק אם יש שירות 3G/LTE כפי שצריך לאפליקציה לנייד.