আমি কোডরঞ্জার হিসাবে একই ইঞ্জিনে কাজ করেছি। আমার ভিন্ন দৃষ্টিভঙ্গি রয়েছে। :)
প্রথমত, আমাদের কাছে এফএসএমের স্ট্যাক ছিল না - আমাদের স্ট্যাক স্টেট ছিল। একটি স্ট্যাক রাজ্য একটি একক এফএসএম করে। আমি জানি না এফএসএমগুলির একটি স্ট্যাক কেমন লাগবে। ব্যবহারিক কিছু করার জন্য সম্ভবত খুব জটিল।
আমাদের গ্লোবাল স্টেট মেশিনের সাথে আমার সবচেয়ে বড় সমস্যাটি হ'ল এটি ছিল রাজ্যের একটি স্ট্যাক, এবং রাজ্যের একটি সেট নয়। এর অর্থ, উদাহরণস্বরূপ, ... / মেইনমেনু / লোডিং লোডিং স্ক্রিনের আগে বা পরে মূল মেনু পেয়েছে কিনা তার উপর নির্ভর করে (গেমটি অ্যাসিনক্রোনাস এবং লোডিং বেশিরভাগ সার্ভার চালিত হয়) )।
দুটি উদাহরণ হিসাবে এটি কুৎসিত হয়েছে:
- এটি উদাহরণস্বরূপ লোডিংগেমপ্লে স্টেটের দিকে পরিচালিত করেছিল, সুতরাং গেমপ্লে রাজ্যের মধ্যে লোডিংয়ের জন্য আপনার কাছে বেস / লোডিং এবং বেস / গেমপ্লে / লোডিংগেমপ্লে রয়েছে, যা সাধারণ লোডিং অবস্থায় (তবে সমস্ত নয়, এবং আরও কিছু যুক্ত করে) কোডের অনেকগুলি পুনরাবৃত্তি করতে হয়েছিল )।
- আমাদের বেশ কয়েকটি ফাংশন ছিল যেমন "যদি চরিত্রের স্রষ্টায় গেমপ্লেতে যান; গেমপ্লেতে যদি চরিত্র নির্বাচন করতে যান; যদি চরিত্র নির্বাচন করে আবার লগইনে ফিরে যান", কারণ আমরা একই রাজ্যে একই ইন্টারফেস উইন্ডো প্রদর্শন করতে চেয়েছিলাম তবে পিছনে / এগিয়ে বোতামগুলি এখনও কাজ করে।
নাম সত্ত্বেও, এটি খুব "গ্লোবাল" ছিল না। বেশিরভাগ অভ্যন্তরীণ গেম সিস্টেমগুলি তাদের অভ্যন্তরীণ রাজ্যগুলি ট্র্যাক করার জন্য এটি ব্যবহার করে না, কারণ তারা চায় না যে তাদের রাজ্যগুলি অন্যান্য সিস্টেমের সাথে মাতামাতি করবে। অন্যরা, যেমন ইউআই সিস্টেম, এটি কেবলমাত্র তাদের নিজস্ব স্থানীয় রাজ্য সিস্টেমে রাষ্ট্রের অনুলিপি করতে ব্যবহার করতে পারে। (আমি বিশেষত ইউআই রাজ্যগুলির ব্যবস্থার বিরুদ্ধে সাবধানতা অবলম্বন করব U ইউআই রাজ্যটি কোনও স্ট্যাক নয়, এটি সত্যই একটি ডিএজি, এবং এর উপর অন্য কোনও কাঠামোকে জোর করে চাপানোর চেষ্টা কেবলমাত্র ইউআই তৈরি করতে চলেছে যা ব্যবহারে হতাশাব্যঞ্জক।)
যেটি ভাল ছিল তা অবকাঠামোগত প্রোগ্রামারদের কোড সংহত করার জন্য কাজগুলি বিচ্ছিন্ন করা যা গেমের প্রবাহটি আসলে কীভাবে কাঠামোবদ্ধ ছিল তা জানত না, তাই আপনি প্যাচার লেখককে "ক্লায়েন্ট_প্যাচ_উপডেটে আপনার কোডটি রেখেছিলেন" এবং গ্রাফিক লেখার লোকটিকে বলতে পারেন "আপনার কোডটি ক্লায়েন্ট_ম্যাপট্যান্সফার_অননেটারে রাখুন" লোড করা হচ্ছে এবং আমরা কোনও সমস্যা ছাড়াই কিছু নির্দিষ্ট যুক্তির প্রবাহকে অদলবদল করতে পারি।
একটি পার্শ্ব প্রকল্প, আমি একটি রাষ্ট্র সঙ্গে ভাল ভাগ্য ছিল সেট একটি বদলে স্ট্যাক , সম্পর্কহীন সিস্টেমের জন্য একাধিক মেশিন করতে ভয় পাবেন না পেরে এবং নিজেকে একটি "বৈশ্বিক রাষ্ট্র" থাকার ফাঁদ, যা সত্যিই পড়া যাক অস্বীকার গ্লোবাল ভেরিয়েবলের মাধ্যমে জিনিসগুলি সিঙ্ক্রোনাইজ করার জন্য একটি জটিল উপায় - অবশ্যই, আপনি এটি কিছু সময়সীমার কাছাকাছি শেষ করতে চলেছেন, তবে এটি আপনার লক্ষ্য হিসাবে নকশা করবেন না । মৌলিকভাবে, একটি গেমের স্টেট স্ট্যাক নয় এবং একটি গেমের রাজ্যগুলি সমস্ত সম্পর্কিত নয়।
জিএসএম এছাড়াও, ফাংশন পয়েন্টার এবং স্থানীয়-স্থানীয় আচরণের প্রবণতা হিসাবে, ডিবাগিং জিনিসগুলিকে আরও কঠিন করে তুলেছিল, যদিও আমাদের আগে এটির আগে বড় ধরণের রাষ্ট্রীয় রূপান্তরগুলি ডিবাগ করা খুব মজাদার ছিল না। রাষ্ট্র-স্ট্যাকগুলির পরিবর্তে রাজ্য-সেটগুলি এটিকে সত্যিই সহায়তা করে না, তবে আপনার এটি সম্পর্কে সচেতন হওয়া উচিত। ফাংশন পয়েন্টারগুলির চেয়ে ভার্চুয়াল ফাংশনগুলি কিছুটা কমিয়ে দিতে পারে।