বর্তমানে আমি একটি টাইল ভিত্তিক গেমটি নিজেরাই নিয়ে কাজ করছি (মনে করি টেরারিয়া, তবে কম কল্পনাপ্রসূত (আমি মনে করি এটি একটি শব্দ? দুঃখিত না হলে এটি))।
যাইহোক, আমার কাছে বর্তমানে সংঘর্ষ সনাক্তকরণ কাজ করছে (কোণার ক্ষেত্রে এমনকি!) যা আমার জন্য একটি বড় পদক্ষেপ ছিল। একটি স্প্রাইট একটি ব্লক দিয়ে চালানো না দেখে চরম সন্তোষজনক কিছু আছে। তবে তখন আমার কাছে বেনমার্ক করার ধারণা ছিল। খারাপ ধারণা।
1,000 স্কোয়ার, কোনও সমস্যা নেই। 10,000 টি স্কয়ার, 3 টি অক্ষরের জন্য এক ধরণের লেগ ছিল। ১০০,০০০ স্কোয়ার (সত্যই বিশাল মানচিত্র), 3 টি অক্ষরের জন্য প্লে করা যায় না।
আমার এমন সমস্যা রয়েছে যেখানে আমি প্লেয়ার, চরিত্র, আইটেম ইত্যাদির থেকে খুব দূরে থাকা ব্লকগুলিও বিবেচনা করতে চাই না, তবে আমি স্মরণে থাকা অবিচ্ছিন্নভাবে ক্রমাগত লোড করতে চাই না।
এখানে এখন পর্যন্ত আমার অ্যালগরিদম, সমালোচনা নির্দ্বিধায়।
foreach (Block in level)
{
if (distance from block to player > a specified amount)
ignore this block;
else
{
get the intersection depth between the two bounding boxes
if (depth of intersection != Zero-vector)
{
check y size vs x size
resolve on smallest axis
}
}
}
যেমন আপনি লক্ষ করবেন, স্তরের আকার যখন আরও বড় হয়, এই অ্যালগরিদমের ক্রমটি এন ব্লকগুলি দ্বারা বৃদ্ধি পায়। আমি এমনকি ব্লকগুলি এমনকি প্লেয়ারের কাছাকাছি নয় বিবেচনা করতে চাই would
আমি ভাবছি হয়ত কোনও (0,0) থেকে (মানচিত্রের প্রস্থ, ম্যাপহাইট) তালিকার পরিবর্তে ডাবল-অ্যারে ব্যবহার করুন, ব্যক্তির অবস্থানের উপর নির্ভর করে একটি বিপদ-অঞ্চল গণনা করা, যেমন প্লেয়ারের অবস্থান (10, 20) এটি (0, 10) থেকে (20, 30), বা আরও কিছু দেখতে পাবেন।
যেকোন চিন্তাভাবনা এবং বিবেচনা দুর্দান্ত,