টেলিভিশন স্ক্রিনটি এমন অনেক বিবেচ্য বিষয় উপস্থাপন করে যা মোবাইল গেম ডেভেলপারদের কাছে নতুন হতে পারে। এই ক্ষেত্রগুলির মধ্যে রয়েছে এর বৃহৎ আকার, এর নিয়ন্ত্রণ পরিকল্পনা এবং সমস্ত খেলোয়াড় একসাথে এটি দেখছে এই বিষয়টি।
প্রদর্শন
টিভি স্ক্রিনের জন্য গেম তৈরি করার সময় দুটি প্রধান বিষয় মনে রাখা উচিত: ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য আপনার গেমটি ডিজাইন করা এবং কম ল্যাটেন্সির জন্য সহায়তা প্রদান করা।
ল্যান্ডস্কেপ প্রদর্শন সমর্থন করে
একটি টিভি সবসময় পাশে থাকে: আপনি এটি ঘুরাতে পারবেন না, এবং কোনও প্রতিকৃতি ওরিয়েন্টেশন নেই। সর্বদা আপনার টিভি গেমগুলি ল্যান্ডস্কেপ মোডে প্রদর্শিত হওয়ার জন্য ডিজাইন করুন।
অটো কম ল্যাটেন্সি মোড
কিছু ডিসপ্লে গ্রাফিক্স পোস্ট-প্রসেসিং করতে পারে। এই পোস্ট-প্রসেসিং গ্রাফিক্সের মান উন্নত করে কিন্তু ল্যাটেন্সি বাড়াতে পারে। HDMI 2.1 সমর্থনকারী নতুন ডিসপ্লেগুলিতে একটি অটো লো ল্যাটেন্সি মোড ( ALLM ) রয়েছে, যা এই পোস্ট-প্রসেসিং বন্ধ করে ল্যাটেন্সি কমিয়ে দেয়। ALLM সম্পর্কে আরও তথ্যের জন্য, HDMI 2.1 স্পেসিফিকেশন দেখুন। অন্যান্য ডিসপ্লে একই ধরণের আচরণ সহ একটি গেম মোড সমর্থন করতে পারে।
অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণগুলিতে, একটি উইন্ডো ন্যূনতম পোস্ট-প্রসেসিংয়ের অনুরোধ করে, যদি উপলব্ধ থাকে তবে অটো লো ল্যাটেন্সি মোড বা গেম মোড ব্যবহার করার অনুরোধ করতে পারে। এটি বিশেষ করে গেম এবং ভিডিও কনফারেন্সিং অ্যাপ্লিকেশনগুলির জন্য কার্যকর, যেখানে সর্বোত্তম সম্ভাব্য গ্রাফিক্সের চেয়ে কম ল্যাটেন্সি বেশি গুরুত্বপূর্ণ।
ন্যূনতম পোস্ট-প্রসেসিং সক্ষম বা অক্ষম করতে, Window.setPreferMinimalPostProcessing() কল করুন, অথবা উইন্ডোর preferMinimalPostProcessing অ্যাট্রিবিউটটিকে true তে সেট করুন। সমস্ত ডিসপ্লে ন্যূনতম পোস্ট-প্রসেসিং সমর্থন করে না; কোনও নির্দিষ্ট ডিসপ্লে এটি সমর্থন করে কিনা তা জানতে, Display.isMinimalPostProcessingSupported() পদ্ধতিটি কল করুন।
ইনপুট ডিভাইস
টিভিতে টাচ ইন্টারফেস থাকে না, তাই আপনার নিয়ন্ত্রণগুলি সঠিকভাবে করা এবং খেলোয়াড়দের জন্য সেগুলি ব্যবহার করা সহজ এবং মজাদার কিনা তা নিশ্চিত করা আরও গুরুত্বপূর্ণ। কন্ট্রোলার পরিচালনার ক্ষেত্রে আরও কিছু বিষয় রয়েছে যার দিকে মনোযোগ দেওয়া উচিত, যেমন একাধিক কন্ট্রোলারের ট্র্যাক রাখা এবং সংযোগ বিচ্ছিন্নতাগুলিকে সুন্দরভাবে পরিচালনা করা। গেম সহ সমস্ত টিভি অ্যাপের কন্ট্রোলারগুলিকে ধারাবাহিকভাবে পরিচালনা করা উচিত। টিভি কন্ট্রোলার ব্যবহার সম্পর্কে আরও তথ্যের জন্য "ম্যানেজ টিভি কন্ট্রোলার" এবং গেমের জন্য টিভি কন্ট্রোলার ব্যবহার সম্পর্কে নির্দিষ্ট তথ্যের জন্য "হ্যান্ডেল কন্ট্রোলার ফর গেমস" পড়ুন।
কীবোর্ড লেআউট
অ্যান্ড্রয়েড ১৩ (এপিআই লেভেল ৩৩) এবং তার উচ্চতর সংস্করণে, আপনি 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 হোম স্ক্রিনে নিয়মিত অ্যাপ থেকে আলাদা সারিতে গেমগুলি দেখানো হয়। আপনার গেমটিকে গেমের তালিকায় দেখানোর জন্য, আপনার অ্যাপ ম্যানিফেস্টের <application> ট্যাগে android:isGame অ্যাট্রিবিউটটিকে "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 পরিষেবার Saved Games ব্যবহার করুন। আপনার গেমের সেভগুলি একটি নির্দিষ্ট Google অ্যাকাউন্টের সাথে আবদ্ধ করা উচিত, যাতে ডিভাইস জুড়েও এটি অনন্যভাবে শনাক্তযোগ্য হয়: খেলোয়াড় হ্যান্ডসেট ব্যবহার করুক বা টিভি, গেমটি একই ব্যবহারকারী অ্যাকাউন্ট থেকে গেম-সেভ তথ্য সংগ্রহ করতে সক্ষম হওয়া উচিত।
আপনার গেমের UI-তে একটি বিকল্পও প্রদান করা উচিত যাতে প্লেয়ার স্থানীয়ভাবে এবং ক্লাউড-সঞ্চিত ডেটা মুছে ফেলতে পারে। আপনি গেমের Settings স্ক্রিনে বিকল্পটি রাখতে পারেন। Play Services ব্যবহার করে সংরক্ষিত গেমগুলি বাস্তবায়নের সুনির্দিষ্ট তথ্যের জন্য, Android-এ সংরক্ষিত গেমগুলি দেখুন।
প্রস্থান করুন
একটি সুসংগত এবং স্পষ্ট UI উপাদান প্রদান করুন যা ব্যবহারকারীকে সুন্দরভাবে গেমটি থেকে বেরিয়ে আসতে সাহায্য করবে। এই উপাদানটি ডি-প্যাড নেভিগেশন বোতামগুলির মাধ্যমে অ্যাক্সেসযোগ্য হওয়া উচিত। প্রস্থান প্রদানের জন্য হোম বোতামের উপর নির্ভর করার পরিবর্তে এটি করুন, কারণ এটি বিভিন্ন কন্ট্রোলারে সামঞ্জস্যপূর্ণ বা নির্ভরযোগ্য নয়।
ওয়েব
Android TV-এর জন্য গেমগুলিতে ওয়েব ব্রাউজিং সক্ষম করবেন না। Android TV কোনও ওয়েব ব্রাউজার সমর্থন করে না।
দ্রষ্টব্য: সোশ্যাল মিডিয়া পরিষেবাগুলিতে লগইন করার জন্য আপনি WebView ক্লাস ব্যবহার করতে পারেন।
নেটওয়ার্কিং
গেমগুলিতে সর্বোত্তম পারফর্ম্যান্স প্রদানের জন্য প্রায়শই বেশি ব্যান্ডউইথের প্রয়োজন হয় এবং অনেক ব্যবহারকারী সেই পারফর্ম্যান্স প্রদানের জন্য ওয়াইফাইয়ের চেয়ে ইথারনেট পছন্দ করেন। আপনার অ্যাপের ওয়াইফাই এবং ইথারনেট উভয় সংযোগই পরীক্ষা করা উচিত। যদি আপনার অ্যাপটি কেবল টিভির জন্য হয়, তাহলে আপনাকে মোবাইল অ্যাপের মতো 3G/LTE পরিষেবা পরীক্ষা করার প্রয়োজন হবে না।