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

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

תצוגה

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

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

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

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

במסכים מסוימים אפשר לבצע עיבוד גרפי לאחר העיבוד הראשוני. העיבוד שאחרי השיפור הזה משפר את איכות הגרפיקה, אבל עלול להגדיל את זמן האחזור. במסכים חדשים יותר שתומכים ב-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 לערך "false" אם אפשר לשחק במשחק גם באמצעות שלט רחוק רגיל של טלוויזיה (כפתורי החיצים). צריך להגדיר את android:required לערך "true" רק אם נדרש שלט משחק כדי לשחק במשחק. ההגדרה android:required="true" מציגה תג "נדרש שלט משחק" ואזהרה לפני ההתקנה ב-Google Play ל-Android TV, במקום לחסום את ההתקנה במכשירי טלוויזיה.

מידע נוסף על רשומות מניפסט זמין במאמר קובץ מניפסט של אפליקציה.

Google Play Games Services

אם המשחק שלכם משולב עם שירותי המשחקים של Google Play, כדאי לזכור כמה דברים שקשורים להישגים, להתחברות ולשמירת משחקים.

הישגים

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

כניסה

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

מתבצעת שמירה

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

כדאי גם לספק אפשרות בממשק המשתמש של המשחק שתאפשר לשחקן למחוק נתונים ששמורים באופן מקומי ובענן. אפשר להציב את האפשרות במסך Settings של המשחק. במאמר משחקים שמורים ב-Android מוסבר איך להטמיע משחקים שמורים באמצעות Play Services.

יציאה

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

אינטרנט

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

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

Networking

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