টেলিভিশন স্ক্রিনে এমন অনেক বিষয় বিবেচনা করতে হয় যা মোবাইল গেম ডেভেলপারদের কাছে নতুন হতে পারে। এইসব বিষয়ের মধ্যে রয়েছে এর বিশাল আকার, কন্ট্রোল স্কিম এবং এই বিষয়টি যে সব প্লেয়ার একই সাথে এটি দেখছেন।
ডিসপ্লে
টিভির স্ক্রিনের জন্য গেম ডেভেলপ করার সময় দুটি প্রধান বিষয় মনে রাখতে হবে, সেগুলি হল ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য গেম ডিজাইন করা এবং কম লেটেন্সির জন্য সহায়তা প্রদান করা।
ল্যান্ডস্কেপ ডিসপ্লেতে কাজ করে
টিভি সবসময় আড়াআড়ি থাকে: আপনি এটি ঘোরাতে পারবেন না এবং কোনও পোর্ট্রেট ওরিয়েন্টেশন নেই। আপনার টিভি গেম সবসময় ল্যান্ডস্কেপ মোডে দেখানোর জন্য ডিজাইন করুন।
অটোমেটিক লো লেটেন্সি মোড
কিছু ডিসপ্লে গ্রাফিক্স পোস্ট-প্রসেসিং করতে পারে। এই পোস্ট-প্রসেসিং গ্রাফিক্সের কোয়ালিটি উন্নত করে তবে লেটেন্সি বাড়াতে পারে। HDMI 2.1 কাজ করে এমন নতুন ডিসপ্লেতে অটো লো লেটেন্সি মোড (ALLM) থাকে, যা এই পোস্ট-প্রসেসিং বন্ধ করে লেটেন্সি কম করে। ALLM সম্পর্কে আরও জানতে, HDMI 2.1 স্পেসিফিকেশন দেখুন। অন্যান্য ডিসপ্লেতে একই ধরনের আচরণ সহ গেম মোড কাজ করতে পারে।
Android 11 ও তার পরবর্তী যেকোনও ভার্সনে, কোনও উইন্ডো ন্যূনতম পোস্ট-প্রসেসিং করার অনুরোধ করে, উপলভ্য থাকলে অটোমেটিক লো-লেটেন্সি মোড বা গেম মোড ব্যবহার করার অনুরোধ করতে পারে। এটি বিশেষ করে গেম এবং ভিডিও কনফারেন্সিং অ্যাপ্লিকেশনের জন্য উপযোগী, যেখানে কম লেটেন্সি থাকা সেরা সম্ভাব্য গ্রাফিক্স থাকার চেয়ে বেশি গুরুত্বপূর্ণ।
মিনিমাল পোস্ট-প্রসেসিং চালু বা বন্ধ করতে, কল করুন
Window.setPreferMinimalPostProcessing(),
অথবা উইন্ডোর
preferMinimalPostProcessing
অ্যাট্রিবিউটকে true হিসেবে সেট করুন। সব ডিসপ্লেতে ন্যূনতম পোস্ট-প্রসেসিং কাজ করে না; কোনও নির্দিষ্ট ডিসপ্লেতে
এটি কাজ করে কিনা তা জানতে, Display.isMinimalPostProcessingSupported() মেথড কল করুন।
ইনপুট ডিভাইস
টিভিতে টাচ ইন্টারফেস থাকে না, তাই কন্ট্রোল সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা এবং প্লেয়াররা যাতে সেগুলি সহজেই বুঝতে ও ব্যবহার করতে পারেন তা দেখা আরও বেশি গুরুত্বপূর্ণ। কন্ট্রোলার ম্যানেজ করা এছাড়াও, একাধিক কন্ট্রোলার ট্র্যাক করা এবং ডিসকানেক্ট হওয়ার ঘটনা সুন্দরভাবে ম্যানেজ করার মতো কিছু সমস্যা তৈরি করে। গেম সহ সব TV অ্যাপে কন্ট্রোলার একইভাবে ম্যানেজ করতে হবে। টিভি কন্ট্রোলার ব্যবহার করার ব্যাপারে আরও তথ্যের জন্য টিভি কন্ট্রোলার ম্যানেজ করুন এবং গেমের জন্য টিভি কন্ট্রোলার ব্যবহার করার ব্যাপারে নির্দিষ্ট তথ্যের জন্য গেমের জন্য কন্ট্রোলার ম্যানেজ করুন নিবন্ধ পড়ুন।
কীবোর্ড লেআউটগুলি
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) }
জাভা
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 হোম স্ক্রিনে সাধারণ অ্যাপ থেকে আলাদা সারিতে গেম দেখানো হয়।
গেমের তালিকায় আপনার গেম দেখাতে, আপনার অ্যাপ ম্যানিফেস্টের
<application>
ট্যাগে
android:isGame অ্যাট্রিবিউটকে "true" হিসেবে সেট করুন। যেমন:
<application ... android:isGame="true" ... >
গেম কন্ট্রোলারের জন্য কাজ করে বলে ঘোষণা করা
টিভি ডিভাইসের ব্যবহারকারীদের জন্য গেম কন্ট্রোলার উপলভ্য বা অ্যাক্টিভ নাও থাকতে পারে। আপনার গেম যে গেম কন্ট্রোলার দিয়ে খেলা যায় তা ব্যবহারকারীদের সঠিকভাবে জানানোর জন্য, আপনার অ্যাপ ম্যানিফেস্টে আপনাকে অবশ্যই নিম্নলিখিত এন্ট্রি যোগ করতে হবে:
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
মনে রাখবেন: android.hardware.gamepad
সাপোর্ট নির্দিষ্ট করার সময়, আপনার গেম যদি সাধারণ টিভি
রিমোট (D-pad) দিয়েও খেলা যায়, তাহলে android:required অ্যাট্রিবিউটকে
"false" হিসেবে সেট করুন। আপনার গেম খেলার জন্য গেম কন্ট্রোলার প্রয়োজন হলে,
android:required-এর মান "true" হিসেবে সেট করুন।
android:required="true" সেটিং, টিভি ডিভাইসে ইনস্টলেশন ব্লক করার পরিবর্তে,
Android TV-র জন্য Google Play-তে "গেমপ্যাড প্রয়োজন" ব্যাজ এবং
প্রি-ইনস্টল সতর্কতা দেখায়।
ম্যানিফেস্ট এন্ট্রি সম্পর্কে আরও জানতে, অ্যাপ ম্যানিফেস্ট দেখুন।
Google Play গেম্স পরিষেবা
আপনার গেম Google Play গেম পরিষেবা ইন্টিগ্রেট করলে, আপনাকে বেশ কিছু বিষয় মাথায় রাখতে হবে, যেমন কৃতিত্ব, সাইন-ইন করা ও গেম সেভ করা।
কৃতিত্ব
আপনার গেমে অন্তত পাঁচটি (অর্জনযোগ্য) অ্যাচিভমেন্ট থাকতে হবে। শুধুমাত্র কোনও উপযুক্ত ইনপুট ডিভাইস থেকে গেমপ্লে কন্ট্রোল করা ব্যবহারকারীই অ্যাচিভমেন্ট অর্জন করতে পারবেন। অ্যাচিভমেন্ট এবং কীভাবে সেগুলি প্রয়োগ করতে হয় সেই সম্পর্কে আরও তথ্যের জন্য, Android-এ অ্যাচিভমেন্ট দেখুন।
সাইন-ইন করুন
আপনার গেম চালু করার সময় ব্যবহারকারীকে সাইন-ইন করানোর চেষ্টা করা উচিত। প্লেয়ার পরপর কয়েকবার সাইন-ইন করার অনুরোধ প্রত্যাখ্যান করলে, আপনার গেমের আর জিজ্ঞাসা করা উচিত নয়। Android-এ সাইন-ইন প্রয়োগ করা লিঙ্ক থেকে সাইন-ইন সম্পর্কে আরও জানুন।
সেভ করা হচ্ছে
আপনার গেম সেভ করে রাখতে Google Play পরিষেবার সেভ করা গেম ব্যবহার করুন। আপনার গেমের উচিত গেম সেভকে একটি নির্দিষ্ট Google অ্যাকাউন্টের সাথে বাইন্ড করা, যাতে এমনকি বিভিন্ন ডিভাইস জুড়ে অনন্যভাবে শনাক্ত করা যায়: প্লেয়ার হ্যান্ডসেট বা টিভি ব্যবহার করছেন কিনা, গেমটি একই ব্যবহারকারীর অ্যাকাউন্ট থেকে গেম-সেভ তথ্য টানতে সক্ষম হওয়া উচিত।
এছাড়াও, আপনার গেমের UI-তে এমন একটি বিকল্প প্রদান করতে হবে যার মাধ্যমে প্লেয়ার লোকাল ও ক্লাউডে সেভ করা ডেটা
মুছে দিতে পারবেন। আপনি গেমের Settings স্ক্রিনে বিকল্পটি রাখতে পারেন। Play পরিষেবা ব্যবহার করে সেভ করা গেম প্রয়োগ করার
নির্দিষ্ট পদ্ধতি সম্পর্কে জানতে, Android-এ সেভ করা গেম দেখুন।
বেরিয়ে আসুন
এমন একটি সামঞ্জস্যপূর্ণ এবং স্পষ্ট UI এলিমেন্ট প্রদান করুন যা ব্যবহারকারীকে গেম থেকে সহজে বেরিয়ে আসতে দেয়। এই এলিমেন্ট ডি-প্যাড নেভিগেশন বোতামের মাধ্যমে অ্যাক্সেসযোগ্য হতে হবে। বেরিয়ে আসার জন্য হোম বোতামের উপর নির্ভর না করে এটি করুন, কারণ এটি বিভিন্ন কন্ট্রোলার জুড়ে সামঞ্জস্যপূর্ণ বা নির্ভরযোগ্য নয়।
ওয়েব
Android TV-এর জন্য গেমে ওয়েব ব্রাউজিং চালু করবেন না। Android TV-তে ওয়েব ব্রাউজার কাজ করে না।
মনে রাখবেন: সোশ্যাল মিডিয়া পরিষেবায় লগ-ইন করার জন্য আপনি WebView ক্লাস ব্যবহার করতে
পারবেন।
নেটওয়ার্কিং
অপ্টিমাম পারফর্ম্যান্স প্রদান করার জন্য গেমের প্রায়ই বেশি ব্যান্ডউইথের প্রয়োজন হয় এবং সেই পারফর্ম্যান্স প্রদান করার জন্য অনেক ব্যবহারকারী ওয়াই-ফাইয়ের পরিবর্তে ইথারনেট ব্যবহার করতে পছন্দ করেন। আপনার অ্যাপকে ওয়াই-ফাই ও ইথারনেট কানেকশন, দু'টিই চেক করতে হবে। আপনার অ্যাপটি শুধুমাত্র টিভির জন্য হলে, মোবাইল অ্যাপের মতো 3G/LTE পরিষেবা চেক করার প্রয়োজন নেই।