প্রথম, এখানে কোড। একটি ব্যাখ্যা অনুসরণ করবে:
/*
* tw, th contain the tile width and height.
*
* hitTest contains a single channel taken from a tile-shaped hit-test
* image. Data was extracted with getImageData()
*/
worldToTilePos = function(x, y) {
var eventilex = Math.floor(x%tw);
var eventiley = Math.floor(y%th);
if (hitTest[eventilex + eventiley * tw] !== 255) {
/* On even tile */
return {
x: Math.floor((x + tw) / tw) - 1,
y: 2 * (Math.floor((y + th) / th) - 1)
};
} else {
/* On odd tile */
return {
x: Math.floor((x + tw / 2) / tw) - 1,
y: 2 * (Math.floor((y + th / 2) / th)) - 1
};
}
};
নোট করুন যে এই কোডটি আপনার প্রশ্নের মধ্যে প্রদর্শিত মানচিত্রের বাক্সের বাইরে কাজ করবে না। এটি আপনার বাম দিক থেকে বিজোড় টাইলস অফসেট করার কারণে, অন্যদিকে বিজোড় টাইলগুলি সাধারণত ডানদিকে অফসেট থাকে ( টাইল্ড মানচিত্র সম্পাদকের ক্ষেত্রে যেমন হয় )। বিজোড়-টাইল ক্ষেত্রে x মানটি টুইট করে এটির সহজ প্রতিকার করতে সক্ষম হওয়া উচিত।
ব্যাখ্যা
এটি এই কাজটি সম্পাদন করার জন্য আরও কিছুটা হিংস্র শক্তি পদ্ধতি বলে মনে হতে পারে তবে এটি কমপক্ষে পিক্সেল নিখুঁত এবং কিছুটা নমনীয় হওয়ার সুবিধা রয়েছে।
কৌশলটি কোনও একক স্তম্ভিত গ্রিড হিসাবে নয়, বরং দুটি গ্রিড একে অপরের শীর্ষে ওভারলেড হয়ে দেখার জন্য is এখানে বিজোড়-সারি গ্রিড এবং সম-সারি গ্রিড রয়েছে তবে আসুন পরিবর্তে তাদেরকে লাল এবং সবুজ বলি যাতে আমরা একটি সুন্দর চিত্র তৈরি করতে পারি ...
এই চিত্রের ডানদিকে লক্ষ্য করুন আমি বেগুনি বিন্দু দিয়ে একটি পয়েন্ট চিহ্নিত করেছি। এটি আমাদের মূল টাইল-স্পেসে অনুসন্ধানের চেষ্টা করব example
বিশ্বের যে কোনও বিন্দু সম্পর্কে লক্ষ্য করার বিষয়টি হ'ল এটি সর্বদা ঠিক দুটি অঞ্চলে থাকবে - একটি লাল এবং সবুজ একটি (যদি এটি কোনও কিনারায় না থাকে তবে আপনি সম্ভবত জাগ্রত প্রান্তের সীমানার মধ্যে ক্লিপিং করে যাবেন)। আসুন সেই অঞ্চলগুলি সন্ধান করি ...
এখন দুটি অঞ্চলের মধ্যে কোনটি সঠিক তা চয়ন করতে। সর্বদা সঠিক উত্তর হবে।
এখান থেকে আমরা আরও কিছু সহজ পাটিগণিত করতে পারি এবং দুটি অঞ্চলের প্রতিটি কেন্দ্র বিন্দুতে আমাদের নমুনা বিন্দু থেকে স্কোয়ার দূরত্বটি নিয়ে কাজ করতে পারি। যার নিকটতম আমাদের উত্তর হবে।
তবে বিকল্প উপায় আছে। প্রতিটি পরীক্ষার অঞ্চলের জন্য, আমরা একটি বিটম্যাপ নমুনা করি যা আমাদের টাইলসের সঠিক আকারের সাথে মেলে। আমরা সেই একক-টাইলের স্থানীয় স্থানাঙ্কে অনুবাদিত বিন্দুতে এটি নমুনা করি। আমাদের উদাহরণের জন্য এটি দেখতে এরকম কিছু লাগবে:
বাম দিকের একটি আমরা সবুজ অঞ্চলটি পরীক্ষা করে হিট পাই (ব্ল্যাক পিক্সেল) get ডানদিকে আমরা লাল অঞ্চলটি পরীক্ষা করি এবং একটি মিস (হোয়াইট পিক্সেল) পাই। দ্বিতীয় পরীক্ষাটি অবশ্যই অনর্থক কারণ এটি সর্বদা এক বা অন্য হতে হবে, কখনই নয়।
তারপরে আমরা এই সিদ্ধান্তে পৌঁছে যাচ্ছি যে আমাদের কাছে বিজোড় টাইলটি হিট হয়েছে 1,1 এ। বিজোড় এবং এমনকি সারিগুলির জন্য পৃথক রূপান্তর ব্যবহার করে মূল টাইল স্থানাঙ্কগুলিতে মানচিত্রের জন্য এই সমন্বয়টি সহজ হওয়া উচিত।
এই পদ্ধতিটি আপনাকে পিক্সেল পরীক্ষা বিটম্যাপ (গুলি) এ সাধারণ প্রতি পিক্সেল বৈশিষ্ট্যগুলিও পেতে দেয়। যেমন সাদা অফ-টাইল, কালো একটি হিট, নীল জল, লাল শক্ত।