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

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

نمایش

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

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

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

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

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

در اندروید 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 TV بازی ها را در یک ردیف جداگانه از برنامه های معمولی نمایش می دهد. برای اینکه بازی خود را در لیست بازی ها نشان دهید، ویژگی android:isGame در تگ <application> مانیفست برنامه خود روی "true" تنظیم کنید. به عنوان مثال:

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

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

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

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

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

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

خدمات بازی های گوگل پلی

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

دستاوردها

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

وارد شوید

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

صرفه جویی

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

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

خارج شوید

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

وب

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

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

شبکه سازی

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