কিছুটা ব্যাকগ্রাউন্ড, আমি সত্তা সিস্টেমের জন্য ENTT ব্যবহার করে সি ++ তে একটি বন্ধুর সাথে একটি বিবর্তন গেম কোড করছি । প্রাণীগুলি 2D মানচিত্রে ঘুরে বেড়ায়, শাকসব্জী বা অন্যান্য প্রাণী খায়, পুনরুত্পাদন করে এবং তাদের বৈশিষ্ট্যগুলি পরিবর্তন করে।
অতিরিক্তভাবে, গেমটি রিয়েল টাইমে চালানো হলে পারফরম্যান্স ভাল হয় (60fps কোনও সমস্যা নেই), তবে আমি কোনও উল্লেখযোগ্য পরিবর্তন দেখতে 4 ঘন্টা অপেক্ষা না করার জন্য এটিকে দ্রুতগতিতে সক্ষম করতে চাই to তাই আমি এটি যত তাড়াতাড়ি পেতে চাই।
আমি প্রাণীদের খাদ্য খুঁজে পেতে একটি কার্যকর পদ্ধতি খুঁজতে লড়াই করছি to প্রতিটি প্রাণীর কাছে তাদের কাছে খুব ভাল খাবারের সন্ধান করার কথা।
যদি এটি খেতে চায় তবে কেন্দ্রটিতে চিত্রিত প্রাণীটি নিজের চারপাশে একটি 149.64 ব্যাসার্ধের দিকে দৃষ্টিপাত করবে (এর দেখার দূরত্ব) এবং পুষ্টি, দূরত্ব এবং ধরণের (মাংস বা উদ্ভিদ) এর উপর ভিত্তি করে কোন খাবারটি গ্রহণ করা উচিত তা বিচার করবে ।
প্রতিটি প্রাণীকে তাদের খাবার সন্ধানের জন্য দায়ী ফাংশন রান-টাইমের প্রায় 70% খাচ্ছে। বর্তমানে এটি কীভাবে লিখিত হয়েছে সরলকরণ, এটি এরকম কিছু হয়:
for (creature : all_creatures)
{
for (food : all_entities_with_food_value)
{
// if the food is within the creatures view and it's
// the best food found yet, it becomes the best food
}
// set the best food as the target for creature
// make the creature chase it (change its state)
}
এই ক্রিয়াকলাপটি প্রতিটি প্রাণীর জন্য খাদ্য সন্ধানের জন্য প্রতিটি টিক চালিত হয়, যতক্ষণ না প্রাণীটি খাদ্য আবিষ্কার করে এবং স্থিতি পরিবর্তন করে। এটি প্রত্যেকবারই নতুন খাবারের প্রাণীদের জন্য ইতিমধ্যে একটি নির্দিষ্ট খাবারের তাড়া করে চালানোর জন্য চালানো হয়, যাতে সকলেই তাদের জন্য সর্বোত্তম খাবার সরবরাহ করে available
এই প্রক্রিয়াটিকে আরও দক্ষ করে তুলতে কীভাবে আমি ধারণার জন্য উন্মুক্ত। আমি জটিলতাটি থেকে হ্রাস করতে পছন্দ করব তবে এটি এমনকি সম্ভব কিনা তা আমি জানি না।
আমি ইতিমধ্যে এটির উন্নতি করার একটি উপায় all_entities_with_food_value
গ্রুপকে বাছাই করা যাতে কোনও প্রাণী যখন খাবারের জন্য খুব বড় খাবারের উপরে পুনরাবৃত্তি করে, এটি সেখানে থামে। অন্য কোন উন্নতি স্বাগত চেয়ে বেশি!
সম্পাদনা: জবাবের জন্য আপনাকে সবাইকে ধন্যবাদ! আমি বিভিন্ন উত্তর থেকে বিভিন্ন জিনিস বাস্তবায়িত করেছি:
আমি প্রথমত এবং সহজভাবে এটি তৈরি করেছিলাম যাতে দোষী ফাংশন প্রতি পাঁচটি টিকিটে একবার চালিত হয়, এটি গেমটি 4x-এর কাছাকাছি করে তোলে, যখন গেম সম্পর্কে দৃশ্যমানভাবে কোনও পরিবর্তন হয় না।
তারপরে আমি খাদ্য অনুসন্ধান সিস্টেমে সংরক্ষণ করেছিলাম খাবারটি একই টিকায় তৈরি খাবারের সাথে এটি চালায়। এইভাবে আমাকে কেবল প্রাণীটি যে নতুন খাবারগুলি হাজির হয়েছে তার সাথেই তাড়া করছে compare
অবশেষে, মহাকাশ বিভাজন নিয়ে গবেষণা এবং বিভিএইচ এবং চতুর্ভুজকে বিবেচনা করার পরে আমি পরবর্তীকালের সাথে চলেছি, কারণ আমার মনে হচ্ছে এটি আমার মামলার সাথে অনেক সহজ এবং আরও উপযুক্ত। আমি এটি খুব দ্রুত বাস্তবায়ন করেছি এবং এটি কার্যকারিতা উন্নত করেছে, খাদ্য অনুসন্ধান সবেমাত্র যে কোনও সময় নেয়!
এখন রেন্ডারিং হ'ল যা আমার গতি কমিয়ে দিচ্ছে, তবে এটি অন্য দিনের সমস্যা। সবাইকে ধন্যবাদ!
if (food.x>creature.x+149.64 or food.x<creature.x-149.64) continue;
করা "জটিল" স্টোরেজ স্ট্রাকচার বাস্তবায়নের চেয়ে সহজ হওয়া উচিত যদি এটি যথেষ্ট পারফরম্যান্স করে। (সম্পর্কিত: আপনি যদি আপনার অভ্যন্তরীণ লুপে কোডের কিছুটা বেশি পোস্ট করেন তবে এটি আমাদের সহায়তা করতে পারে)