টেলিভিশন স্ক্রিন এমন কিছু বিষয় বিবেচনা করার সুযোগ দেয় যা মোবাইল গেম ডেভেলপারদের কাছে নতুন হতে পারে। এইসব বিষয়ের মধ্যে রয়েছে এর বড় সাইজ, এর কন্ট্রোল স্কিম এবং এই তথ্য যে সব প্লেয়ার একইসাথে এটি দেখছেন।
ডিসপ্লে
টিভি স্ক্রিনের জন্য গেম ডেভেলপ করার সময় দুটি প্রধান বিষয় মনে রাখতে হবে, সেগুলি হল ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য গেম ডিজাইন করা এবং কম লেটেন্সির জন্য সহায়তা প্রদান করা।
ল্যান্ডস্কেপ ডিসপ্লেতে কাজ করে
টিভি সবসময় আড়াআড়িভাবে থাকে: আপনি এটি ঘোরাতে পারবেন না এবং এতে কোনও পোর্ট্রেট ওরিয়েন্টেশন নেই। আপনার টিভি গেম সবসময় ল্যান্ডস্কেপ মোডে দেখানোর জন্য ডিজাইন করুন।
অটোমেটিক লো লেটেন্সি মোড
নির্দিষ্ট কিছু ডিসপ্লে গ্রাফিক্স পোস্ট-প্রসেসিং করতে পারে। এই পোস্ট-প্রসেসিং গ্রাফিক্সের কোয়ালিটি উন্নত করে তবে লেটেন্সি বাড়াতে পারে। 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 Services ব্যবহার করে সেভ করা গেম প্রয়োগ করার বিষয়ে
নির্দিষ্ট তথ্য পেতে, Android-এ সেভ করা গেম দেখুন।
বেরিয়ে আসুন
ব্যবহারকারী যাতে সহজেই গেম থেকে বেরিয়ে আসতে পারেন, তার জন্য একটি সুসংহত ও স্পষ্ট UI এলিমেন্ট প্রদান করুন। এই এলিমেন্ট ডি-প্যাড নেভিগেশন বোতামের মাধ্যমে অ্যাক্সেসযোগ্য হতে হবে। বেরিয়ে আসার জন্য হোম বোতামের উপর নির্ভর না করে এটি করুন, কারণ বিভিন্ন কন্ট্রোলারে এটি একরকম বা নির্ভরযোগ্য নয়।
ওয়েব
Android TV-এর জন্য গেমে ওয়েব ব্রাউজিং চালু করবেন না। Android TV-তে ওয়েব ব্রাউজার কাজ করে না।
মনে রাখবেন: সোশ্যাল মিডিয়া পরিষেবায় লগ-ইন করার জন্য আপনি WebView ক্লাস ব্যবহার করতে
পারবেন।
নেটওয়ার্কিং
গেমের ক্ষেত্রে প্রায়ই আরও বেশি ব্যান্ডউইথের প্রয়োজন হয় যাতে সবচেয়ে ভালো পারফর্ম্যান্স প্রদান করা যায় এবং অনেক ব্যবহারকারীই সেই পারফর্ম্যান্স প্রদান করার জন্য ওয়াই-ফাইয়ের পরিবর্তে ইথারনেট ব্যবহার করতে পছন্দ করেন। আপনার অ্যাপের ওয়াই-ফাই ও ইথারনেট কানেকশন দুটিই চেক করা উচিত। আপনার অ্যাপটি শুধুমাত্র টিভির জন্য হলে, মোবাইল অ্যাপের মতো 3G/LTE পরিষেবা চেক করার প্রয়োজন নেই।