এক পর্যায়ে একটি ইঞ্জিন গেম সম্পর্কে স্টাফকে বিশেষজ্ঞ এবং জানা উচিত। আমি এখানে একটি স্পর্শক উপর যেতে হবে।
একটি আরটিএসে সংস্থান করুন। একটি গেম থাকতে পারে Creditsএবং Crystalঅন্যটি MetalএবংPotatoes
আপনার ওও ধারণাটি সঠিকভাবে ব্যবহার করা উচিত এবং সর্বাধিক সন্ধান করা উচিত। কোড-পুনঃব্যবহারের। এটা পরিষ্কার যে Resourceএখানে একটি ধারণা বিদ্যমান।
সুতরাং আমরা সিদ্ধান্ত নিই সংস্থানগুলিতে নিম্নলিখিত রয়েছে:
- মূল লুপের মধ্যে একটি হুক যা তাদের বর্ধিত / হ্রাস করার জন্য
- বর্তমান পরিমাণ পাওয়ার একটি উপায় (একটি রিটার্ন দেয়
int)
- নির্বিচারে বিয়োগ / যোগ করার একটি উপায় (প্লেয়ারগুলি সংস্থান স্থানান্তর, ক্রয় ....)
খেয়াল করুন যে একটির এই ধারণাটি Resourceকোনও খেলায় কিল বা পয়েন্ট উপস্থাপন করতে পারে! এটি খুব শক্তিশালী নয়।
এখন একটি খেলা সম্পর্কে চিন্তা করা যাক। পেনিগুলিতে লেনদেন করে এবং আউটপুটে দশমিক পয়েন্ট যুক্ত করে আমরা মুদ্রা রাখতে পারি। আমরা যা করতে পারি না তা হ'ল "তাত্ক্ষণিক" সংস্থান। "পাওয়ার গ্রিড উত্পাদন" বলুন
আপনাকে InstantResourceএকই ধরণের পদ্ধতির সাথে একটি ক্লাস যুক্ত করার অনুমতি দেয় । আপনি এখন সংস্থানগুলি দিয়ে ইঞ্জিনকে দূষিত করছেন (শুরু করছেন)।
সমস্যাটি
আরটিএসের উদাহরণটি আবার নেওয়া যাক। মনে করুন প্লেয়ার যা কিছু Crystalঅন্য খেলোয়াড়কে কিছু দান করে। আপনি যেমন কিছু করতে চান:
if(transfer.target == engine.getPlayerId()) {
engine.hud.addIncoming("You got "+transfer.quantity+" of "+
engine.resourceDictionary.getNameOf(transfer.resourceId)+
" from "+engine.getPlayer(transfer.source).name);
}
engine.getPlayer(transfer.target).getResourceById(transfer.resourceId).add(transfer.quantity)
engine.getPlayer(transfer.source).getResourceById(transfer.resourceId).add(-transfer.quantity)
তবে এটি সত্যিই বেশ অগোছালো। এটি সাধারণ উদ্দেশ্য, তবে অগোছালো। ইতিমধ্যে যদিও এটি একটি চাপিয়ে দেয় resourceDictionaryযার অর্থ এখন আপনার সংস্থানগুলির নাম থাকতে হবে! এবং এটি খেলোয়াড় প্রতি, তাই আপনার আর দলের সংস্থান থাকতে পারে না।
এটি "অত্যধিক" বিমূর্ততা (আমি স্বীকৃত একটি উজ্জ্বল উদাহরণ নয়) এর পরিবর্তে আপনার এমন একটি বিন্দু আঘাত করা উচিত যেখানে আপনি স্বীকার করেন যে আপনার গেমটিতে খেলোয়াড় এবং স্ফটিক রয়েছে, তারপরে আপনি ঠিক রাখতে পারেন (উদাহরণস্বরূপ)
engine.getPlayer(transfer.target).crystal().receiveDonation(transfer)
engine.getPlayer(transfer.source).crystal().sendDonation(transfer)
এমন একটি শ্রেণি Playerএবং শ্রেণীর সাথে CurrentPlayerযেখানে অনুদানের স্থানান্তর / প্রেরণের জন্য CurrentPlayerএর crystalঅবজেক্টটি স্বয়ংক্রিয়ভাবে এইচইউডিতে স্টাফটি প্রদর্শন করবে।
এটি স্ফটিক, স্ফটিক দান, বর্তমান খেলোয়াড়দের জন্য এইচইউডির বার্তাগুলি এবং সমস্ত কিছুর সাথে ইঞ্জিনকে দূষিত করে। পড়তে / লিখতে / বজায় রাখা উভয়ই দ্রুত এবং সহজ (এটি আরও গুরুত্বপূর্ণ, এটি উল্লেখযোগ্যভাবে দ্রুত হয় না বলে)
চূড়ান্ত মন্তব্য
রিসোর্স কেস উজ্জ্বল নয়। আমি আশা করি আপনি এখনও পয়েন্ট দেখতে পারেন। যদি নির্দিষ্ট কিছু গেমের কী প্রয়োজন এবং সংস্থানগুলির সমস্ত ধারণার ক্ষেত্রে কী প্রযোজ্য তবে "ইঞ্জিনের মধ্যে রিসোর্সগুলি অন্তর্ভুক্ত নয়" এমন কোনও কিছু যদি আমি দেখিয়েছি তবে খুব আলাদা জিনিস। আপনি সাধারণত যা পাবেন তা হ'ল 3 (বা 4) "স্তর"
- "কোর" - এটি ইঞ্জিনের পাঠ্যপুস্তক সংজ্ঞা, এটি ইভেন্ট হুক সহ একটি দৃশ্য গ্রাফ, এটি শেডার এবং নেটওয়ার্ক প্যাকেট এবং প্লেয়ারগুলির একটি বিমূর্ত ধারণা নিয়ে কাজ করে
- "গেমকোর" - এটি গেমের ধরণের ক্ষেত্রে বেশ জেনেরিক তবে সমস্ত গেমের কাছে নয় - উদাহরণস্বরূপ আরটিএসের সংস্থানসমূহ বা এফপিএসগুলিতে গোলাবারুদ। গেমটির যুক্তি এখানে প্রবেশ করতে শুরু করে। আমাদের সূত্রগুলির ধারণাটি এখানেই ছিল। আমরা এই জিনিসগুলি যুক্ত করেছি যা বেশিরভাগ আরটিএস সংস্থার জন্য অর্থবোধ করে।
- "গেমলজিক" আসল গেমটি তৈরির ক্ষেত্রে খুব নির্দিষ্ট। তোমার মত নামের সাথে ভেরিয়েবল পাবেন
creatureবা shipবা squad। ব্যবহার উত্তরাধিকার আপনি ক্লাস যে সব 3 স্তর জুড়ে পাবেন (উদাহরণস্বরূপ Crystal একটি হল Resource যা একটি হল GameLoopEventListener বলে)
- "সম্পদ" এগুলি অন্য কোনও খেলায় অব্যর্থ। উদাহরণস্বরূপ, অর্ধজীবন 2 এআই স্ক্রিপ্টগুলি একত্রিত করুন, তারা একই ইঞ্জিন সহ আরটিএসে ব্যবহৃত হবে না।
পুরানো ইঞ্জিন থেকে একটি নতুন গেম তৈরি করা
এটি খুব সাধারণ। ধাপ 1 হ'ল স্তর 3 এবং 4 কেটে ফেলা হয় (এবং গেমটি যদি সম্পূর্ণ ভিন্ন ধরণের হয়) ধরুন আমরা কোনও পুরানো আরটিএস থেকে আরটিএস তৈরি করছি। আমাদের কাছে এখনও সংস্থান রয়েছে, কেবল স্ফটিক এবং স্টাফ নয় - তাই স্তর 2 এবং 1 এর বেস ক্লাসগুলি এখনও বোঝায়, 3 এবং 4 তে উল্লিখিত সমস্ত স্ফটিক বাতিল করা যেতে পারে। সুতরাং আমরা কি। আমরা তবে যা করতে চাই তার রেফারেন্স হিসাবে এটি পরীক্ষা করতে পারি।
স্তর 1 এ দূষণ
এটা ঘটতে পারে। বিমূর্ততা এবং অভিনয় শত্রু হয়। উদাহরণস্বরূপ, ইউই 4 রচনাটির অনেকগুলি অনুকূলিতাপূর্ণ কেস সরবরাহ করে (তাই আপনি যদি এক্স এবং ওয়াই কেউ চান এমন কোড লিখেছিলেন যা এক্স এবং ওয়াই একসাথে দ্রুত করে - এটি জানে যে এটি উভয়ই করছে) এবং ফলস্বরূপ সত্যই বেশ বড়। এটি খারাপ নয় তবে এটি সময়সাপেক্ষ। স্তর 1 "শেডারগুলিতে ডেটা কীভাবে প্রেরণ করবে" এবং কীভাবে আপনি জিনিসগুলিকে অ্যানিমেট করবেন সে বিষয়ে সিদ্ধান্ত নেবে। আপনার প্রকল্পের জন্য এটি সর্বোত্তম উপায়ে করা সর্বদা ভাল। ভবিষ্যতের জন্য চেষ্টা করুন এবং পরিকল্পনা করুন, কোডটি পুনরায় ব্যবহার করা আপনার বন্ধু, যেখানে এটি বোঝা যায় তার উত্তরাধিকারী।
শ্রেণিবদ্ধ স্তরসমূহ
অবশেষে (আমি প্রতিশ্রুতি দিচ্ছি) স্তরগুলি থেকে খুব ভয় পাবেন না। ইঞ্জিন স্থির ফাংশন পাইপলাইনগুলির পুরানো দিনগুলি থেকে একটি প্রত্নসম্পর্কীয় শব্দ যেখানে ইঞ্জিনগুলি গ্রাফিকভাবে একইভাবে কাজ করেছিল (এবং ফলস্বরূপ প্রচলিত ছিল) প্রোগ্রামেবল পাইপলাইনটি এটি তার মাথায় ঘুরিয়ে দিয়েছে এবং যেমন "স্তর 1" দূষিত হয়ে যায় Engine বিকাশকারীরা যাই হোক না কেন প্রভাব অর্জন করতে চেয়েছিল। এআই ইঞ্জিনগুলির বিশিষ্ট বৈশিষ্ট্য ছিল (অগণিত পদ্ধতির কারণে), এখন এটি এআই এবং গ্রাফিক্স।
আপনার কোডটি এই স্তরগুলিতে ফাইল করা উচিত নয়। এমনকি বিখ্যাত অবাস্তব ইঞ্জিনটিতে বিভিন্ন গেমের জন্য নির্দিষ্ট বিভিন্ন ধরণের সংস্করণ রয়েছে। এখানে কয়েকটি ফাইল রয়েছে (সম্ভবত ডেটা স্ট্রাকচারের মতো অন্যান্য) যা অপরিবর্তিত থাকবে। এই জরিমানা! আপনি যদি অন্য একটি থেকে নতুন গেম তৈরি করতে চান তবে এটি 30 মিনিটের বেশি সময় নিতে পারে। কীটি বিলি এবং পেস্ট করতে হবে এবং কী পিছনে ছেড়ে যাবে তা জেনে রাখা কীটি পরিকল্পনা করা হয়।