প্রচুর অ্যান্ড্রয়েড গেমগুলি সংরক্ষণ / লোড বা বিকল্পগুলি / পছন্দগুলি ন্যায্যতা প্রমাণ করার সুযোগের পক্ষে যথেষ্ট পরিমাণে বড় নয়, কাস্টম চরিত্রগুলি এবং এ জাতীয় কিছু মনে করবেন না কারণ এগুলি ট্রেনের বাড়ীতে 10 মিনিটের জন্য খেলানো হয়।
প্রথম অ্যান্ড্রয়েড গেমের জন্য বৃহত্তর সুযোগ নিয়ে কিছু করার জন্য আমি যে ভুল করেছিলাম তা করবেন না। আরও কিছু ছোট গেম তৈরি করুন তারপরে আরও বড় কিছু করুন
অ্যান্ড্রয়েড নির্দিষ্টভাবে বিজ্ঞাপিত:
গঠন:
আমি প্রায় সমস্ত খেলা একটি ক্রিয়াকলাপ ক্লাসে রাখার পরামর্শ দেব। অ্যান্ড্রয়েড প্রতিটি ক্রিয়াকলাপ একটি মিনি-অ্যাপের মতো, অ্যাপ্লিকেশানের অন্যান্য ক্রিয়াকলাপগুলির চেয়ে আধা-স্বতন্ত্র idea এই ধারণাটিতে কাজ করে। অ্যাপ্লিকেশনটি মূলত ক্রিয়াকলাপের একটি স্তূপ, যা ব্যবহারকারী কখনও শীর্ষে থাকে তা দেখে।
আপনি যখন উপরে থেকে পপ করেন, তখন এটি সাধারণত ধ্বংস হয়ে যায় এবং পরের বার যখন ব্যবহারকারী কোনও নতুন ক্রিয়াকলাপ শুরু করে (স্টার্টঅ্যাক্টিভিটি অভিপ্রায়) পুনরায় তৈরি করা হয়। এটি ক্রিয়াকলাপগুলির মধ্যে রাষ্ট্র বজায় রাখা শক্ত করে তোলে এবং একক ক্রিয়াকলাপের আর্কিটেকচারের দিকে নিয়ে যায়
আপনি এটিতে একটি "নতুন গেম / লোড গেম / বিকল্পসমূহ" মেনুতে একটি হোম স্ক্রিন ধরণের ক্রিয়াকলাপ রাখতে এবং এটি লঞ্চটির ক্রিয়াকলাপ তৈরি করতে চাইতে পারেন। তবে, আপনার গেমের ক্রিয়াকলাপের পাশাপাশি একটি গেম মেনু রাখার সমাপ্তি ঘটবে, এতে বেশিরভাগ একই কার্যকারিতা থাকবে
আমার নিজস্ব অ্যাপ্লিকেশন, আমি একটি "মেনুঅ্যাক্টিভিটি" তৈরি করেছি যাতে ফাংশন রয়েছে যা একটি নতুন গেম চালু করে, সংরক্ষণ করুন, লোড করুন, বিকল্পগুলি পরিবর্তন করুন। তারপরে আমার হোমঅ্যাক্টিভিটি আমার গেমঅ্যাক্টিভিটির মতো তা বাড়িয়ে দেয়।
যেহেতু সবকিছুই এক্টিভিটি ক্লাসে রয়েছে তাই আমি ক্রিয়াকলাপের ক্লাসগুলির উত্তরাধিকারীকরণ এবং ব্যক্তিগত, সুরক্ষিত এবং ডিফল্ট স্কোপ প্রচুর ব্যবহার করার পরামর্শ দেব। এইভাবে এটি করা, আপনি একটি নিয়ন্ত্রণহীন ক্রিয়াকলাপ ফাইল থাকা থেকে বিরত রাখতে কমপক্ষে বিভিন্ন জিনিসগুলিকে আলাদা আলাদা ফাইলে বিভক্ত করতে পারেন। যেমন আমার নিজস্ব অ্যাপ্লিকেশন:
GraphicsEngine extends MenuActivity
।
PhysicsEngine extends GraphicsEngine
।
GameLogicActivity extends PhysicsEngine
।
UIActivity extends GameLogicActivity
।
যেহেতু আমার অ্যাপ্লিকেশনটি থ্রিডি ওপেনগ্ল-এস, প্রচুর পরিমাণে আমি ক্রস-ক্রিয়াকলাপগুলি কাজ করি না তাই সমস্ত কিছু একই ক্রিয়াকলাপে থাকে, তাই সম্ভবত আমি একটি ক্রিয়াকলাপের আর্কিটেকচার ব্যবহারের দিকে পক্ষপাতদুষ্ট রয়েছি
-
থ্রেডিং
গেমের ক্রিয়াকলাপের জন্য আপনার দুটি থ্রেড রয়েছে (বা 3 আপনি যদি 3D ওপেনগল স্টাফ করছেন তবে)। একটি থ্রেড হ'ল ইউআই / প্রধান থ্রেড। এই থ্রেডটিই ক্রিয়াকলাপটি শুরু হয়ে যায় এবং চালু হয় এবং আপনাকে অ্যান্ড্রয়েড দ্বারা দেওয়া হয়।
এই ইউআই থ্রেডটি কেবলমাত্র আপনিই ইউআই উপাদানগুলি (ভিউ, লেআউট ইত্যাদি) আপডেট করতে পারবেন It এটি এমন এক যেখানে ব্যবহারকারীদের ইনপুটটির জন্য কোনও শ্রোতা চালিত হবে। আপনি ইউআই থ্রেডের কোনও যান্ত্রিক দেখতে পাচ্ছেন না, কেবল এটি কোথাও পটভূমির লুপে চলে।
দ্বিতীয় থ্রেড, আপনি নিজেকে তৈরি করুন (আমি সমস্ত ত্রুটি থাকা সত্ত্বেও এসিঙ্কটাস্ক ব্যবহারের পরামর্শ দিই )। এটি একটি সাধারণ গেম লুপে আপনার সমস্ত অ-ইউআই কাজ করে, যেমন চলন আপডেট করা, সংঘর্ষের গণনা করা, যুদ্ধের গণনা ইত্যাদি।
আপনি আপনার ক্রিয়াকলাপের একটি অভ্যন্তরীণ শ্রেণী হিসাবে এটি AsyncTask থ্রেড / শ্রেণি তৈরি করেন। এইভাবে, আপনার কাছে কিছু ক্রিয়াকলাপ-প্রশস্ত-স্কোপ অবজেক্ট ( Vector<Spaceship>
) থাকতে পারে যা ইউআই থ্রেড এবং গেম লুপ থ্রেড উভয়ই অ্যাক্সেস করতে পারে।
যেহেতু গেম লুপ থ্রেডে গেম লজিক চলছে, সেই একমাত্র থ্রেডটিই আসলে ভেরিয়েবলের মান পরিবর্তন করতে হবে (ট্যাঙ্কের গতি আপডেট করুন, প্লেয়ার এইচপি হ্রাস করুন)। ইউআই থ্রেডটি কেবল মানগুলি পড়ে, তাই ন্যূনতম একযোগিতামূলক সমস্যা থাকতে হবে।
কৌতুকপূর্ণ বিট গেম লুপ থ্রেডের অনুরোধে আপডেট করার জন্য ইউআই থ্রেড পাচ্ছে। এটি করার কয়েকটি উপায় রয়েছে। আপনি যদি অ্যাসিঙ্কটাস্ক ডকুমেন্টেশনটি পড়েন তবে এটিতে প্রোগ্রেসগ্রস () / অনগ্রোগআপআপেট () পদ্ধতি রয়েছে। এটি আসলে লুপটি করার জন্য ইউআই থ্রেডের জিনিসগুলির কাতারে স্টাফ যুক্ত করছে।
হ্যান্ডলার ঠিক একই জিনিসটি করে, যেখানে আপনি হ্যান্ডেলমেজেজ () পদ্ধতিটি প্রয়োগ করেন এবং সেই পদ্ধতিটি আসলে ইউআই থ্রেডটি পরবর্তী লুপ দ্বারা কার্যকর করা হয়।
অবশেষে, যে কোনও ব্যবহারকারী-ইনপুট, ইউআই থ্রেডে থাকা অবস্থায়, আপনি এটির সাথে সাথেই ইউআই উপাদানগুলি আপডেট করতে পারেন (সুতরাং কোনও অন্লিক / অন-টাচ শ্রোতার প্রয়োগের অভ্যন্তরে)। যদি আপনাকে গেমের বিষয়গুলি আপডেট করতে হয় তবে আপনি হয় সিঙ্ক্রোনাইজের মতো জিনিসগুলি ব্যবহার করতে পারেন, বা আপনি ইউআই থ্রেডের মতো আপনার নিজের আপডেটের সারিটি এসিঙ্কটাস্কে প্রয়োগ করতে পারেন, এটি পরবর্তী সময় গেম লুপটি কার্যকর করে through
অ্যান্ড্রয়েড থ্রেডিং গাইড ।
-
UI 'তে
একক ক্রিয়াকলাপের মধ্যে প্রকৃত ইউআই কাঠামোর জন্য, আমি আপনার বেস লেআউট হিসাবে ফ্রেম বিন্যাস রাখার পরামর্শ দিচ্ছি। ফ্রেমের বিন্যাসে থাকা শিশু উপাদানগুলি একটি সারিটির মতো কাজ করে। প্রথম উপাদানটি প্রথম আঁকে, দ্বিতীয়টি প্রথম শীর্ষে টানা হয়, দ্বিতীয়টির শীর্ষে তৃতীয় হয়।
এইভাবে, আপনার একাধিক এক্সএমএল লেআউট ফাইল থাকতে পারে এবং ফ্রেম বিন্যাসের বাচ্চাদের পরিচালনা করে, খুব সহজেই ভিউগুলির সেটগুলি আউট এবং আউট করতে পারে।
আপনার যদি সর্বদা নীচের দিকে সারফেসভিউ থাকে (ফ্রেম বিন্যাসে প্রথম শিশু), তবে আপনি পৃষ্ঠের দৃশ্যের শীর্ষে সমস্ত সাধারণ অ্যান্ড্রয়েড ভিউ / উইজেট (বোতাম, পাঠ্য দর্শন, স্ক্রোল দর্শন) ইত্যাদি ব্যবহার করতে পারেন যা কেবলমাত্র গেমের গ্রাফিক্স অংশ।
সুতরাং উদাহরণস্বরূপ, যদি কোনও কিছু লোড হচ্ছে, আপনি গেমের লুপটি থামিয়ে দিতে পারেন / কেবল সবকিছু এড়িয়ে যেতে পারেন, ফ্রেম লেআউটে সর্বশেষ শিশু হিসাবে একটি অস্বচ্ছ 'লোডিং' স্ক্রিন যুক্ত করুন এবং ব্যবহারকারী তাদের পর্দায় 'লোডিং' প্রদর্শিত হবে , অন্যান্য দৃষ্টিভঙ্গি এর পিছনে রয়েছে তা বেশ অজানা। এইভাবে আপনাকে দৃশ্যের সরাতে হবে না যা প্রতিবার যুক্ত করা / অপসারণ করার সময় সেট আপ করতে বা জটিলতার কারণ হতে অনেক সময় নেয়।
আমি View.setVisibility প্রচুর ব্যবহার করার পরামর্শ দেব। আপনি উদাহরণস্বরূপ, আপনার বেস ফ্রেম বিন্যাসে একটি পুরো 'ইনভেন্টরি' লেআউট যুক্ত করতে পারেন এবং তারপরে ব্যবহারকারীরা তাদের তালিকাটি দেখার জন্য ক্লিক করুন এবং যখন তারা আবার এটি বন্ধ করে দেয় তখন সেটভিজিবিলিটি (View.Gone) ক্লিক করে। এইভাবে, আপনি এমনকি ফ্রেম বিন্যাসের বাচ্চাদের এতটুকু পরিচালনা করছেন না যতক্ষণ না সমস্ত কিছু যুক্ত করা এবং দৃশ্যমান / অদৃশ্য করে এবং যখন ব্যবহারকারী বিভিন্ন জিনিস করেন
এটি আবার থ্রেডিংয়ে সহায়তা করে; ব্যবহারকারী যখন তাদের খোলার জন্য ক্লিক করেন, অনক্লিকলাইজনারটি ইউআই থ্রেডে পরিচালিত হয়, সেখানে তালিকাটি দৃশ্যমান করা হয়, এবং ইউআই থ্রেড থেকে আপডেট ইনভেন্টরি পদ্ধতিটি বলা হয়, সমস্ত গেমের অবজেক্টের সাথে জাস্টারদের বলা হয় being
একক ক্রিয়াকলাপ / ফ্রেম লেআউট ধারণা সম্পর্কে পূর্ববর্তী প্রশ্নের জন্য এখানে আঁকার চিত্রটি এখানে দেওয়া হয়েছে :