কীভাবে আমার অ্যান্ড্রয়েড গেমটি দক্ষতার সাথে বিকাশ করা উচিত? [বন্ধ]


11

আমি পেইন্টে প্রবাহিত চার্টের একটি চিত্র সংযুক্ত করেছি। গেম ধারণার ফ্লো চার্ট

চিত্রটি দেখায় যে আমি কীভাবে আমার গেমটি বিকাশ করতে চাই। আমি এমন একটি গেম চাই যা স্মার্ট কোডিংয়ের সাথে দুর্দান্ত চলতে পারে যা সময়ের সাথে সাথে আপডেট বৈশিষ্ট্য এবং বিজ্ঞাপন বৈশিষ্ট্যগুলি সহজ। আমার টার্গেট প্ল্যাটফর্মটি অ্যান্ড্রয়েড স্মার্টফোন এবং সমস্ত কোড XML ফুলে যাওয়া সংস্থান সহ জাভাতে লেখা হবে, যদি তা বিবেচনা করে। আমি হার্ড কোডটি খুঁজছি না, যদিও সিউডো কোডটি সহায়তা করবে, আমি আরও পরামর্শ এবং পরামর্শ থেকে পছন্দ করব।

আমার প্রশ্নগুলি হ'ল:

কোনও গেমটি প্রোগ্রাম করার এটি কি ভাল উপায় বা এটি করার আরও ভাল উপায় আছে? এমন কোন পরিবর্তন আছে যা করা দরকার? যে কোনও পরামর্শ কার্যকর হবে কারণ আমি গেম প্রোগ্রামিংয়ে অভিজ্ঞ নই তাই আমি বেশ কয়েকটি গেম লিখেছেন এবং অভিজ্ঞতার দ্বারা জানেন যে দক্ষতার সাথে চালানোর জন্য তাদের কোড কীভাবে সেট করা উচিত সে সম্পর্কে পরামর্শটি আমি পছন্দ করি।

উত্তর:


12

প্রচুর অ্যান্ড্রয়েড গেমগুলি সংরক্ষণ / লোড বা বিকল্পগুলি / পছন্দগুলি ন্যায্যতা প্রমাণ করার সুযোগের পক্ষে যথেষ্ট পরিমাণে বড় নয়, কাস্টম চরিত্রগুলি এবং এ জাতীয় কিছু মনে করবেন না কারণ এগুলি ট্রেনের বাড়ীতে 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

একক ক্রিয়াকলাপ / ফ্রেম লেআউট ধারণা সম্পর্কে পূর্ববর্তী প্রশ্নের জন্য এখানে আঁকার চিত্রটি এখানে দেওয়া হয়েছে :

এখানে চিত্র বর্ণনা লিখুন


সুতরাং আপনার মতে আমার সমস্ত গেম লুপ উপাদানগুলি ধরে রাখতে একটি ফ্রেম বিন্যাস থাকা উচিত, তাই না? যদি আমি তা করে থাকি যে কীভাবে আমি এইচইডি ক্লাসে সারফেসভিউয়ের সাথে ইন্টারেক্টিভিটি দেখতে দর্শন পেতে পারি, যেমন ভার্চুয়াল ডি-প্যাড / ভার্চুয়াল অ্যানালগটি বলুন? আমি এর আগে এমন কিছু করার চেষ্টা করেছি এবং ভুলভ্রান্তিতে পড়েছি।
kdavis8

আমি আমার উত্তরটি আরও পরিষ্কার করার জন্য আবার লিখব
চামচ থাম্ব

আমার উত্তর পুনরায় লিখেছেন। আশা করি এটি আরও পরিষ্কার হয়
চামচ থাম্ব


11

আপনার চিত্রটিতে আমি যা দেখছি তার অনেকগুলিই ইউআই সম্পর্কিত এবং এটি অনেকটা যুক্তিসঙ্গত বলে মনে হয়। আপনার চিত্রের কেবলমাত্র সামান্য খেলাগুলি প্রকৃত গেম যুক্তির জন্য সংরক্ষিত আছে এবং এটি খুব অস্পষ্ট।

আমি মনে করি আপনি খুব চেষ্টা করছেন। আমি আপনাকে কেবল কোড লেখা শুরু করার পরামর্শ দেব। একটি নির্দিষ্ট সমস্যা চয়ন করুন এবং এটি সমাধান শুরু করুন। আপনি এতটুকু শিখবেন যে আপনার সমস্যার স্থানটি আপনার সম্পর্কে আরও ভাল ধারণা হওয়ার সাথে সাথে আপনার সম্পূর্ণ ভিন্ন (আরও কার্যকর) দৃষ্টিভঙ্গি হবে।


2
আমি এর সাথে আরও একমত হতে পারি না। এমন একটি নকশা আর্কিটেকচার চয়ন করুন যা গেমটি এবং আপনার পছন্দের সাথে খাপ খায়, তারপরে কোডিং শুরু করুন। আপনি যখন কোনও নির্দিষ্ট পারফরম্যান্স স্ন্যাগকে আঘাত করেন, কাজ না করা পর্যন্ত অনুকূলিত করুন। আপনার গেমের প্রতিটি পৃথক প্রক্রিয়াটির নিজস্ব কর্মক্ষমতা বৈশিষ্ট্য এবং সম্ভাব্য অপটিমেশানস হতে চলেছে - আপনাকে এগুলি পুরোপুরি নয়, স্বতন্ত্রভাবে চিন্তা করতে হবে।
বহুবর্ষীয়

গেম আর্কিটেকচারের জন্য এমন নিদর্শনগুলির জন্য গাইড কোথায় পাওয়া যাবে? এটা আমার জন্য সত্যিই সহায়ক হবে।
বট_বট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.