ساختن بازی‌های تلویزیون

صفحه تلویزیون ملاحظات متعددی را ارائه می‌دهد که ممکن است برای توسعه‌دهندگان بازی تلفن همراه جدید باشد. این حوزه‌ها شامل اندازه بزرگ، طرح کنترل، و این واقعیت است که همه بازیکنان به‌طور هم‌زمان آن را مشاهده می‌کنند.

نمایش

دو نکته اصلی که هنگام توسعه بازی برای صفحه‌نمایش تلویزیون باید درنظر داشته باشید، طراحی بازی برای جهت افقی و ارائه پشتیبانی برای تأخیر کم است.

پشتیبانی از نمایش افقی

تلویزیون همیشه افقی است: نمی‌توانید آن را بچرخانید و جهت عمودی وجود ندارد. همیشه بازی‌های تلویزیون را به نحوی طراحی کنید که در حالت افقی نمایش داده شود.

حالت تأخیر کم خودکار

برخی‌از نمایشگرها می‌توانند پس‌پردازش گرافیکی انجام دهند. این پس‌پردازش کیفیت گرافیک را بهبود می‌بخشد اما می‌تواند تأخیر را افزایش دهد. نمایشگرهای جدیدتری که از HDMI 2.1 پشتیبانی می‌کنند، دارای حالت تأخیر کم خودکار (ALLM) هستند که با خاموش کردن این پس‌پردازش، تأخیر را به حداقل می‌رساند. برای جزئیات بیشتر درباره ALLM، به مشخصات HDMI 2.1 مراجعه کنید. سایر نمایشگرها ممکن است از حالت بازی با عملکرد مشابه پشتیبانی کنند.

در Android نسخه ۱۱ و بالاتر، پنجره می‌تواند درخواست کند که از حالت تأخیر کم خودکار یا حالت بازی (درصورت دردسترس بودن) استفاده شود. این کار با درخواست حداقل پس‌پردازش انجام می‌شود. این حالت به‌ویژه برای برنامه‌های بازی و کنفرانس ویدیویی مفید است که در آن‌ها تأخیر کم مهم‌تر از داشتن بهترین گرافیک ممکن است.

برای فعال یا غیرفعال کردن حداقل پس‌پردازش، Window.setPreferMinimalPostProcessing() را فراخوانی کنید، یا مشخصه preferMinimalPostProcessing پنجره را روی true تنظیم کنید. همه نمایشگرها از حداقل پس‌پردازش پشتیبانی نمی‌کنند؛ برای اینکه بدانید آیا نمایشگر خاصی از آن پشتیبانی می‌کند یا نه، با روش Display.isMinimalPostProcessingSupported() تماس بگیرید.

دستگاه‌های ورودی

تلویزیون‌ها میانای لمسی ندارند، بنابراین بسیار مهم است که کنترل‌هایتان را درست طراحی کنید و مطمئن شوید که بازیکنان آن‌ها را شهودی و سرگرم‌کننده می‌دانند. مدیریت کنترل‌کننده‌ها همچنین مسائل دیگری را ایجاد می‌کند که باید به آن‌ها توجه کرد، مانند پیگیری چندین کنترل‌کننده و مدیریت قطع اتصال به‌صورت مناسب. همه برنامه‌های تلویزیون، ازجمله بازی‌ها، باید کنترل‌کننده‌ها را به‌طور یکسان مدیریت کنند. برای اطلاعات بیشتر درباره استفاده از کنترل‌کننده‌های تلویزیون، مدیریت کنترل‌کننده‌های تلویزیون را بخوانید و برای اطلاعات خاص درباره استفاده از کنترل‌کننده‌های تلویزیون برای بازی‌ها، مدیریت کنترل‌کننده‌ها برای بازی‌ها را بخوانید.

جانمایی صفحه‌کلید

در Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) و بالاتر، می‌توانید جانمایی‌های صفحه‌کلید را بااستفاده از 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 را در برچسب <application> مانیفست برنامه‌تان روی "true" تنظیم کنید. برای مثال:

<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 نمایش می‌دهد، به‌جای اینکه نصب را در دستگاه‌های TV مسدود کند.

برای اطلاعات بیشتر درباره ورودی‌های مانیفست، به مانیفست برنامه مراجعه کنید.

سرویس‌های بازی‌های Google Play

اگر بازی شما با خدمات بازی‌های Google Play ادغام شده است، باید چند نکته را دررابطه‌با موفقیت‌ها، ورود به سیستم، و ذخیره کردن بازی‌ها درنظر داشته باشید.

جوایز

بازی شما باید حداقل پنج جایزه (قابل‌کسب) داشته باشد. فقط کاربری که شیوه بازی را از دستگاه ورودی پشتیبانی‌شده کنترل می‌کند باید بتواند جایزه کسب کند. برای اطلاعات بیشتر درباره جایزه‌ها و نحوه پیاده‌سازی آن‌ها، جایزه‌ها در Android را ببینید.

ورود به سیستم

بازی شما باید تلاش کند کاربر را هنگام راه‌اندازی به سیستم وارد کند. اگر بازیکن چند بار پشت‌سرهم ورود به سیستم را رد کرد، بازی‌تان باید دیگر درخواست نکند. درباره ورود به سیستم در پیاده‌سازی ورود به سیستم در Android بیشتر بدانید.

درحال ذخیره کردن

از بازی‌های ذخیره‌شده در «خدمات Google Play» برای ذخیره کردن بازی‌تان استفاده کنید. بازی شما باید ذخیره‌های بازی را به «حساب Google» خاصی متصل کند تا حتی در دستگاه‌های مختلف به‌طور منحصربه‌فرد قابل‌شناسایی باشد: چه بازیکن از گوشی همراه استفاده کند و چه از تلویزیون، بازی باید بتواند اطلاعات ذخیره‌شده بازی را از همان حساب کاربری بازیابی کند.

همچنین باید گزینه‌ای در میانای کاربری بازی‌تان ارائه دهید تا به بازیکن اجازه دهد داده‌های ذخیره‌شده در فضای ابری و به‌صورت محلی را حذف کند. می‌توانید این گزینه را در صفحه Settings بازی قرار دهید. برای جزئیات مربوط به پیاده‌سازی بازی‌های ذخیره‌شده بااستفاده از «خدمات Play»، به بازی‌های ذخیره‌شده در Android مراجعه کنید.

خارج شدن

عنصر میانای کاربر واضح و ثابتی ارائه دهید که به کاربر اجازه دهد به‌راحتی از بازی خارج شود. این عنصر باید با دکمه‌های پیمایش پد کنترل قابل‌دسترسی باشد. این کار را به‌جای تکیه بر دکمه «صفحه اصلی» برای ارائه خروج انجام دهید، زیرا این روش در کنترل‌کننده‌های مختلف سازگار یا قابل‌اعتماد نیست.

وب

مرور وب را در بازی‌های Android TV فعال نکنید. Android TV از مرورگر وب پشتیبانی نمی‌کند.

توجه: می‌توانید از کلاس WebView برای ورود به سیستم سرویس‌های رسانه‌های اجتماعی استفاده کنید.

ایجاد شبکه

بازی‌ها اغلب به پهنای باند بیشتری نیاز دارند تا عملکرد بهینه را ارائه دهند و بسیاری از کاربران برای ارائه این عملکرد، اترنت را به Wi-Fi ترجیح می‌دهند. برنامه شما باید هم اتصال WiFi و هم اتصال اترنت را بررسی کند. اگر برنامه‌تان فقط برای تلویزیون است، لازم نیست سرویس 3G/LTE را بررسی کنید، همان‌طور که برای برنامه تلفن همراه این کار را می‌کنید.