টেলিভিশন স্ক্রিন এমন কিছু বিষয় সামনে নিয়ে আসে যা মোবাইল গেম ডেভেলপারদের কাছে নতুন হতে পারে। এই বিষয়গুলোর মধ্যে রয়েছে এর বিশাল আকার, এর নিয়ন্ত্রণ ব্যবস্থা এবং সকল খেলোয়াড়ের একই সাথে এটি দেখার বিষয়টি।
প্রদর্শন
টিভি পর্দার জন্য গেম তৈরি করার সময় দুটি প্রধান বিষয় মনে রাখতে হবে: গেমটিকে ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য ডিজাইন করা এবং লো ল্যাটেন্সির সুবিধা প্রদান করা।
ল্যান্ডস্কেপ ডিসপ্লে সমর্থন করে
টিভি সবসময় আড়াআড়িভাবে থাকে: আপনি এটিকে ঘোরাতে পারবেন না, এবং এর কোনো পোর্ট্রেট ওরিয়েন্টেশন নেই। আপনার টিভি গেমগুলো সবসময় ল্যান্ডস্কেপ মোডে প্রদর্শনের জন্য ডিজাইন করুন।
স্বয়ংক্রিয় কম লেটেন্সি মোড
কিছু ডিসপ্লে গ্রাফিক্স পোস্ট-প্রসেসিং করতে পারে। এই পোস্ট-প্রসেসিং গ্রাফিক্সের মান উন্নত করে, কিন্তু ল্যাটেন্সি বাড়িয়ে দিতে পারে। HDMI 2.1 সমর্থনকারী নতুন ডিসপ্লেগুলোতে একটি অটো লো ল্যাটেন্সি মোড ( ALLM ) থাকে, যা এই পোস্ট-প্রসেসিং বন্ধ করে ল্যাটেন্সি কমিয়ে আনে। ALLM সম্পর্কে আরও বিস্তারিত জানতে HDMI 2.1 স্পেসিফিকেশন দেখুন। অন্যান্য ডিসপ্লেতে একই ধরনের কার্যকারিতা সম্পন্ন একটি গেম মোড থাকতে পারে।
অ্যান্ড্রয়েড ১১ এবং এর পরবর্তী সংস্করণগুলিতে, কোনো উইন্ডো মিনিমাল পোস্ট-প্রসেসিংয়ের অনুরোধ করার মাধ্যমে অটো লো ল্যাটেন্সি মোড বা গেম মোড ব্যবহারের জন্য অনুরোধ করতে পারে, যদি তা উপলব্ধ থাকে। এটি বিশেষত গেম এবং ভিডিও কনফারেন্সিং অ্যাপ্লিকেশনগুলির জন্য উপযোগী, যেখানে সর্বোত্তম গ্রাফিক্সের চেয়ে কম ল্যাটেন্সি বেশি গুরুত্বপূর্ণ।
মিনিমাল পোস্ট-প্রসেসিং চালু বা বন্ধ করতে, Window.setPreferMinimalPostProcessing() কল করুন, অথবা উইন্ডোর preferMinimalPostProcessing অ্যাট্রিবিউটটিকে true তে সেট করুন। সব ডিসপ্লে মিনিমাল পোস্ট-প্রসেসিং সমর্থন করে না; কোনো নির্দিষ্ট ডিসপ্লে এটি সমর্থন করে কিনা তা জানতে, Display.isMinimalPostProcessingSupported() মেথডটি কল করুন।
ইনপুট ডিভাইস
টিভিতে টাচ ইন্টারফেস থাকে না, তাই কন্ট্রোলগুলো সঠিকভাবে সেট করা এবং প্লেয়ারদের কাছে সেগুলো স্বজ্ঞাত ও মজাদার মনে হয় তা নিশ্চিত করা আরও বেশি গুরুত্বপূর্ণ। কন্ট্রোলার ব্যবহারের ক্ষেত্রে আরও কিছু বিষয় খেয়াল রাখতে হয়, যেমন একাধিক কন্ট্রোলারের হিসাব রাখা এবং সংযোগ বিচ্ছিন্ন হয়ে গেলে তা সুন্দরভাবে সামলানো। গেমসহ সমস্ত টিভি অ্যাপে কন্ট্রোলারগুলো সামঞ্জস্যপূর্ণভাবে কাজ করা উচিত। টিভি কন্ট্রোলার ব্যবহার সম্পর্কে আরও তথ্যের জন্য ‘টিভি কন্ট্রোলার পরিচালনা’ (Manage TV controllers) পড়ুন এবং গেমের জন্য টিভি কন্ট্রোলার ব্যবহার সম্পর্কে নির্দিষ্ট তথ্যের জন্য ‘গেমের জন্য কন্ট্রোলার পরিচালনা’ (Handle controllers for games) পড়ুন।
কিবোর্ড লেআউট
অ্যান্ড্রয়েড ১৩ (এপিআই লেভেল ৩৩) এবং এর পরবর্তী সংস্করণগুলোতে, আপনি 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 হিসেবে সেট করা হয়েছে। এখন আপনি এই কী কোডগুলোর জন্য কী ইভেন্ট হ্যান্ডলার তৈরি করে প্রত্যাশিত আচরণটি বাস্তবায়ন করতে পারেন।
প্রকাশ
অ্যান্ড্রয়েড ম্যানিফেস্টে গেমগুলোর কিছু বিশেষ বিষয় অন্তর্ভুক্ত করা উচিত।
আপনার গেমটি হোম স্ক্রিনে দেখান
অ্যান্ড্রয়েড টিভির হোম স্ক্রিনে গেমগুলো সাধারণ অ্যাপ থেকে আলাদা একটি সারিতে প্রদর্শিত হয়। আপনার গেমটিকে গেমের তালিকায় দেখাতে, আপনার অ্যাপ ম্যানিফেস্টের <application> ট্যাগে android:isGame অ্যাট্রিবিউটটিকে "true" সেট করুন। উদাহরণস্বরূপ:
<application ... android:isGame="true" ... >
গেম কন্ট্রোলারের জন্য সমর্থন ঘোষণা করুন
টিভি ডিভাইসের ব্যবহারকারীদের জন্য গেম কন্ট্রোলার উপলব্ধ বা সক্রিয় নাও থাকতে পারে। আপনার গেমটি যে গেম কন্ট্রোলার সমর্থন করে, তা ব্যবহারকারীদের সঠিকভাবে জানানোর জন্য, আপনাকে অবশ্যই আপনার অ্যাপ ম্যানিফেস্টে নিম্নলিখিত এন্ট্রিটি অন্তর্ভুক্ত করতে হবে:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
দ্রষ্টব্য: android:hardware:gamepad সাপোর্ট নির্দিষ্ট করার সময়, android:required অ্যাট্রিবিউটটি "true" সেট করবেন না। যদি আপনি এটি করেন, ব্যবহারকারীরা টিভি ডিভাইসে আপনার অ্যাপ ইনস্টল করতে পারবেন না।
ম্যানিফেস্ট এন্ট্রি সম্পর্কে আরও তথ্যের জন্য, অ্যাপ ম্যানিফেস্ট দেখুন।
গুগল প্লে গেম পরিষেবা
আপনার গেমে যদি গুগল প্লে গেমস পরিষেবা অন্তর্ভুক্ত থাকে, তাহলে অ্যাচিভমেন্ট, সাইন-ইন এবং গেম সেভ করা সংক্রান্ত বেশ কিছু বিষয় আপনাকে মনে রাখতে হবে।
অর্জন
আপনার গেমে কমপক্ষে পাঁচটি (অর্জনযোগ্য) অ্যাচিভমেন্ট অন্তর্ভুক্ত থাকা উচিত। শুধুমাত্র একটি সমর্থিত ইনপুট ডিভাইস থেকে গেমপ্লে নিয়ন্ত্রণকারী ব্যবহারকারীই অ্যাচিভমেন্ট অর্জন করতে পারবেন। অ্যাচিভমেন্ট এবং সেগুলি কীভাবে প্রয়োগ করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, অ্যান্ড্রয়েডে অ্যাচিভমেন্ট দেখুন।
সাইন-ইন
আপনার গেমটি চালু হওয়ার সময় ব্যবহারকারীকে সাইন ইন করার চেষ্টা করবে। যদি প্লেয়ার পরপর বেশ কয়েকবার সাইন-ইন করতে অস্বীকার করে, তবে আপনার গেমটি জিজ্ঞাসা করা বন্ধ করে দেবে। অ্যান্ড্রয়েডে সাইন-ইন বাস্তবায়ন (Implementing sign-in on Android) থেকে সাইন-ইন সম্পর্কে আরও জানুন।
সঞ্চয়
আপনার গেম সেভ সংরক্ষণ করতে গুগল প্লে সার্ভিসেস সেভড গেমস ব্যবহার করুন। আপনার গেমটিকে একটি নির্দিষ্ট গুগল অ্যাকাউন্টের সাথে গেম সেভ সংযুক্ত করতে হবে, যাতে বিভিন্ন ডিভাইসেও এটিকে স্বতন্ত্রভাবে শনাক্ত করা যায়: প্লেয়ার হ্যান্ডসেট বা টিভি যা-ই ব্যবহার করুক না কেন, গেমটি যেন একই ইউজার অ্যাকাউন্ট থেকে গেম-সেভের তথ্য সংগ্রহ করতে পারে।
আপনার গেমের ইউজার ইন্টারফেসে (UI) এমন একটি অপশনও রাখা উচিত, যা প্লেয়ারকে স্থানীয়ভাবে এবং ক্লাউডে সংরক্ষিত ডেটা মুছে ফেলার সুযোগ দেবে। আপনি এই অপশনটি গেমের Settings স্ক্রিনে রাখতে পারেন। প্লে সার্ভিসেস ব্যবহার করে সেভ করা গেম বাস্তবায়নের নির্দিষ্ট বিবরণের জন্য, অ্যান্ড্রয়েডে সেভ করা গেম (Saved Games in Android ) দেখুন।
প্রস্থান
একটি সামঞ্জস্যপূর্ণ ও সুস্পষ্ট UI এলিমেন্ট প্রদান করুন, যার মাধ্যমে ব্যবহারকারী স্বাচ্ছন্দ্যে গেম থেকে বেরিয়ে যেতে পারবে। এই এলিমেন্টটি ডি-প্যাড নেভিগেশন বাটনগুলোর মাধ্যমে অ্যাক্সেসযোগ্য হওয়া উচিত। গেম থেকে বের হওয়ার জন্য হোম বাটনের উপর নির্ভর না করে এই পদ্ধতিটি অনুসরণ করুন, কারণ হোম বাটন বিভিন্ন কন্ট্রোলারের ক্ষেত্রে সামঞ্জস্যপূর্ণ বা নির্ভরযোগ্য নয়।
ওয়েব
অ্যান্ড্রয়েড টিভির গেমগুলিতে ওয়েব ব্রাউজিং সক্ষম করবেন না। অ্যান্ড্রয়েড টিভি ওয়েব ব্রাউজার সমর্থন করে না।
দ্রষ্টব্য: আপনি সোশ্যাল মিডিয়া পরিষেবাগুলিতে লগইন করার জন্য WebView ক্লাস ব্যবহার করতে পারেন।
নেটওয়ার্কিং
সর্বোত্তম পারফরম্যান্সের জন্য গেমগুলোতে প্রায়শই বেশি ব্যান্ডউইথের প্রয়োজন হয়, এবং সেই পারফরম্যান্সের জন্য অনেক ব্যবহারকারী ওয়াইফাইয়ের চেয়ে ইথারনেট বেশি পছন্দ করেন। আপনার অ্যাপে ওয়াইফাই এবং ইথারনেট উভয় সংযোগই আছে কিনা তা পরীক্ষা করা উচিত। যদি আপনার অ্যাপটি শুধুমাত্র টিভির জন্য হয়, তবে মোবাইল অ্যাপের মতো 3G/LTE পরিষেবা পরীক্ষা করার প্রয়োজন নেই।