ঠিক আছে, আমি জানি যে এই পোস্টটি বেশ পুরানো, তবে আমি প্রতিরোধ করতে পারিনি।
আমি সম্প্রতি একটি গেম ইঞ্জিন তৈরি করেছি। এটি রেন্ডারিং এবং পদার্থবিজ্ঞানের জন্য 3 ডি পার্টি লাইব্রেরি ব্যবহার করে তবে আমি মূল অংশটি লিখেছি, যা সত্তা এবং গেম যুক্তির সংজ্ঞা দেয় এবং প্রক্রিয়া করে।
ইঞ্জিন অবশ্যই একটি traditionalতিহ্যগত পদ্ধতির অনুসরণ করে। একটি প্রধান আপডেট লুপ রয়েছে যা সমস্ত সত্তার জন্য আপডেট ফাংশনকে কল করে। সংঘর্ষগুলি সরাসরি সংস্থাটিতে কলব্যাকের মাধ্যমে রিপোর্ট করা হয়। সত্তা মধ্যে যোগাযোগ স্মার্ট পয়েন্টার সত্তা সত্তা মধ্যে বিনিময় করা হয়।
একটি আদিম বার্তা সিস্টেম রয়েছে, এটি ইঞ্জিন বার্তাগুলিতে সত্তার একটি ক্ষুদ্র গোষ্ঠী প্রসেস করে। এই বার্তাগুলি কোনও গেম ইন্টারঅ্যাকশন (উদাহরণস্বরূপ একটি সত্তা তৈরি বা ধ্বংস) এর শেষে প্রক্রিয়া করা পছন্দনীয় কারণ তারা আপডেট তালিকার সাথে গোলযোগ করতে পারে। সুতরাং, প্রতিটি গেম লুপের শেষে, বার্তাগুলির একটি ছোট তালিকা গ্রাস করা হয়।
আদিম বার্তা ব্যবস্থা থাকা সত্ত্বেও আমি বলব যে সিস্টেমটি মূলত "আপডেট লুপ ভিত্তিক"।
ভাল। এই সিস্টেমটি ব্যবহার করার পরে, আমি মনে করি এটি খুব সহজ, দ্রুত এবং সুসংহত। গেমের যুক্তিটি দৃশ্যমান এবং স্ব-স্বত্বের সাথে অন্তর্ভুক্ত রয়েছে, কোনও বার্তার কিউয়ের মতো গতিশীল নয়। আমি সত্যিই এটিকে ইভেন্টটি চালিত করতে চাই না কারণ আমার মতে ইভেন্ট সিস্টেমগুলি গেম যুক্তিতে অপ্রয়োজনীয় জটিলতার পরিচয় দেয় এবং গেম কোডটি বুঝতে এবং ডিবাগ করা খুব কঠিন করে তোলে।
তবে, আমি আরও মনে করি যে খাঁটি "আপডেট লুপ ভিত্তিক" সিস্টেমের মতো আমারও কিছু সমস্যা আছে।
উদাহরণস্বরূপ, কিছু মুহুর্তের মধ্যে, একটি সত্তা "কিছুই করুক না রাষ্ট্র" এ থাকতে পারে, প্লেয়ারের কাছে আসতে বা অন্য কিছু অপেক্ষা করতে পারে be এই ক্ষেত্রে বেশিরভাগ ক্ষেত্রে, সত্তা কোনও কিছুর জন্য প্রসেসরের সময় পোড়ায় এবং সত্তাটি বন্ধ করে দেওয়া এবং কোনও নির্দিষ্ট ঘটনা ঘটে গেলে এটি চালু করা ভাল।
সুতরাং, আমার পরবর্তী গেম ইঞ্জিনে, আমি একটি পৃথক পদ্ধতির গ্রহণ করতে যাচ্ছি। সংস্থাগুলি ইঞ্জিন অপারেশনের জন্য আপডেট, অঙ্কন, সংঘর্ষ সনাক্তকরণ এবং এর মতো একটি হিসাবে নিজেদের নিবন্ধভুক্ত করবে। এই ইভেন্টগুলির প্রত্যেকটিতে প্রকৃত সত্তার জন্য সত্তা ইন্টারফেসের পৃথক তালিকা থাকবে।