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

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

نمایش

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

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

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

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

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

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

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

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

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

طرح‌بندی‌های صفحه‌کلید

در اندروید ۱۳ (سطح API ۳۳) و بالاتر، می‌توانید با استفاده از 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:isGame در تگ <application> مانیفست برنامه خود روی "true" تنظیم کنید. برای مثال:

<application
    ...
    android:isGame="true"
    ...
>

اعلام پشتیبانی از کنترلرهای بازی

ممکن است دسته‌های بازی برای کاربران دستگاه تلویزیون در دسترس یا فعال نباشند. برای اینکه به درستی به کاربران اطلاع دهید که بازی شما از دسته بازی پشتیبانی می‌کند، باید ورودی زیر را در مانیفست برنامه خود وارد کنید:

  <uses-feature android:name="android.hardware.gamepad" android:required="false"/>

نکته: هنگام مشخص کردن پشتیبانی android:hardware:gamepad ، ویژگی android:required را روی "true" تنظیم نکنید. در این صورت، کاربران نمی‌توانند برنامه شما را روی دستگاه‌های تلویزیون نصب کنند.

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

سرویس‌های بازی گوگل پلی

اگر بازی شما سرویس‌های بازی‌های گوگل پلی را ادغام می‌کند، باید ملاحظاتی را در مورد دستاوردها، ورود به سیستم و ذخیره بازی‌ها در نظر داشته باشید.

دستاوردها

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

ورود

بازی شما باید هنگام اجرا سعی کند کاربر را وارد سیستم کند. اگر بازیکن چندین بار متوالی درخواست ورود را رد کند، بازی شما باید دیگر این درخواست را نپرسد. برای اطلاعات بیشتر در مورد ورود به سیستم به «پیاده‌سازی ورود به سیستم در اندروید» مراجعه کنید.

صرفه جویی

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

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

خروج

یک عنصر رابط کاربری ثابت و واضح ارائه دهید که به کاربر اجازه دهد به راحتی از بازی خارج شود. این عنصر باید با دکمه‌های جهت‌نما (D-pad) قابل دسترسی باشد. این کار را به جای تکیه بر دکمه Home برای خروج انجام دهید، زیرا این دکمه در کنترلرهای مختلف ثابت و قابل اعتماد نیست.

وب

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

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

شبکه‌سازی

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