আমি একটি সাধারণ, বিকল্প পদ্ধতির সন্ধান পেয়েছি যা নিয়মিত চেকবোর্ডের মতো একই যুক্তি ব্যবহার করে। এটি প্রতিটি টাইলের কেন্দ্রে এবং প্রতিটি শীর্ষবিন্দুতে (একটি শক্ততর গ্রিড তৈরি করে এবং বিকল্প বিন্দু উপেক্ষা করে) সাথে স্ন্যাপ-টু-গ্রিড প্রভাব তৈরি করে।
এই পদ্ধতিটি ক্যাটনের মতো খেলাগুলির জন্য ভাল কাজ করে, যেখানে খেলোয়াড়রা টাইলস এবং উল্লম্বের সাথে যোগাযোগ করে তবে খেলাগুলি কেবল টাইলগুলির সাথে যোগাযোগ করে এমন খেলাগুলির পক্ষে উপযুক্ত নয় কারণ এটি কোন কেন্দ্র বিন্দু বা প্রান্তকে স্থানাঙ্কগুলির নিকটতম, পরিবর্তে ষড়ভুজীয় টাইলটি দেয় স্থানাঙ্কের মধ্যে রয়েছে।
জ্যামিতি
আপনি যদি টাইলের প্রস্থের চতুর্থাংশের কলাম এবং একটি টাইলের অর্ধেক উচ্চতার সারিগুলি সহ গ্রিডে পয়েন্টগুলি রাখেন তবে আপনি এই প্যাটার্নটি পাবেন:
আপনি যদি পরে চেকবোর্ড প্যাটার্নে (স্কিপ if column % 2 + row % 2 == 1
) প্রতিটি দ্বিতীয় বিন্দুতে এড়াতে কোডটি পরিবর্তন করেন তবে আপনি এই প্যাটার্নটি দিয়ে শেষ করবেন:
বাস্তবায়ন
সেই জ্যামিতিটি মাথায় রেখে আপনি একটি 2 ডি অ্যারে তৈরি করতে পারেন (ঠিক যেমন আপনি একটি বর্গাকার গ্রিডের মতো) গ্রিডের x, y
প্রতিটি পয়েন্টের জন্য স্থানাঙ্কগুলি সংরক্ষণ করে (প্রথম চিত্র থেকে) - এরকম কিছু:
points = []
for x in numberOfColumns
points.push([])
for y in numberOfRows
points[x].push({x: x * widthOfColumn, y: y * heightOfRow})
নোট: স্বাভাবিক হিসাবে, যখন আপনি একটি গ্রিড তৈরি করছেন প্রায় পয়েন্ট (বদলে বিন্দু স্থাপন এ নিজেদের পয়েন্ট), আপনি মূল (থেকে একটি কলামের অর্ধেক প্রস্থ বিয়োগ অফসেট প্রয়োজন x
এবং অর্ধেক থেকে সারির উচ্চতা y
)।
এখন আপনার 2 ডি অ্যারে ( points
) আরম্ভ করা হয়েছে, আপনি যেমন বর্গ গ্রিডে যাচ্ছিলেন ঠিক তেমনভাবে মাউসের নিকটতম পয়েন্টটি আবিষ্কার করতে পারেন, কেবল দ্বিতীয় চিত্রটিতে প্যাটার্নটি তৈরি করতে প্রতিটি অন্যান্য পয়েন্ট উপেক্ষা করতে হবে:
column, row = floor(mouse.x / columnWidth), floor(mouse.y / rowHeight)
point = null if column % 2 + row % 2 != 1 else points[column][row]
এটি কাজ করবে, তবে স্থানাঙ্কগুলি নিকটতম বিন্দুতে (বা কোনও বিন্দুতে) গোল করা হচ্ছে যার ভিত্তিতে পয়েন্টারটির মধ্যে অদৃশ্য আয়তক্ষেত্র রয়েছে based আপনি সত্যই পয়েন্টটির চারপাশে একটি বিজ্ঞপ্তি অঞ্চল চান (তাই স্ন্যাপ-পরিসর প্রতিটি দিকের সমান)। এখন আপনি যে পয়েন্টটি পরীক্ষা করতে জানেন তা আপনি সহজেই দূরত্বটি খুঁজে পেতে পারেন (পাইথাগোরাস উপপাদ্যটি ব্যবহার করে)। আরোপিত বৃত্তটি এখনও মূল সীমাবদ্ধ আয়তক্ষেত্রের ভিতরে ফিট করতে হবে, এটির সর্বোচ্চ ব্যাসকে একটি কলামের প্রস্থে (এক টাইলের প্রান্তের প্রস্থ) সীমাবদ্ধ করে রেখেছিল, তবে এটি অনুশীলনে ভালভাবে কাজ করার জন্য এখনও যথেষ্ট বড়।