আপডেট: সংশোধন করা মানচিত্রের উপস্থাপনা অ্যালগরিদম, আরও চিত্র যুক্ত করা হয়েছে, বিন্যাস পরিবর্তন হয়েছে।
স্ক্রিনে টাইলস ম্যাপ করার জন্য "জিগ-জাগ" কৌশলটির সুবিধার জন্য এটি বলা যেতে পারে যে টাইলগুলির x
এবং y
স্থানাঙ্কগুলি উল্লম্ব এবং অনুভূমিক অক্ষতে রয়েছে।
"একটি হীরাতে অঙ্কন" পদ্ধতির:
"হীরাতে অঙ্কন" ব্যবহার করে একটি আইসোমেট্রিক মানচিত্র অঙ্কন করে, আমি বিশ্বাস করি যে কেবলমাত্র for
দ্বি-মাত্রিক অ্যারের উপরে নেস্টেড- লুপ ব্যবহার করে মানচিত্রটি রেন্ডারিংকে বোঝায় :
tile_map[][] = [[...],...]
for (cellY = 0; cellY < tile_map.size; cellY++):
for (cellX = 0; cellX < tile_map[cellY].size cellX++):
draw(
tile_map[cellX][cellY],
screenX = (cellX * tile_width / 2) + (cellY * tile_width / 2)
screenY = (cellY * tile_height / 2) - (cellX * tile_height / 2)
)
সুবিধা:
পদ্ধতির সুবিধা হ'ল এটি সরল নেস্টেড- for
লুপ যা মোটামুটি সোজা এগিয়ে যুক্তি যুক্ত যা সমস্ত টাইল জুড়ে নিয়মিতভাবে কাজ করে।
অসুবিধা:
এই পদ্ধতির একটি নেতিবাচক দিক হ'ল মানচিত্রে টাইলগুলির x
এবং y
স্থানাঙ্কগুলি তির্যক রেখাগুলিতে বৃদ্ধি পাবে, যা স্ক্রিনের অবস্থানটিকে অ্যারে হিসাবে উপস্থাপিত মানচিত্রে দৃশ্যমানভাবে ম্যাপ করা আরও কঠিন করে তুলবে:
তবে উপরের উদাহরণ কোডটি কার্যকর করার ক্ষেত্রে একটি সমস্যা হতে চলেছে - রেন্ডারিং অর্ডারটি এমন টাইলগুলি সৃষ্টি করবে যা কিছু টাইলসের পেছনের অংশ বলে মনে করা হত সামনে টাইলসের শীর্ষে আঁকা:
এই সমস্যাটি সংশোধন করতে, অভ্যন্তরীণ- for
লুপের আদেশটি অবশ্যই বিপরীত হতে হবে - সর্বোচ্চ মান থেকে শুরু করে এবং নিম্ন মানের দিকে রেন্ডারিং:
tile_map[][] = [[...],...]
for (i = 0; i < tile_map.size; i++):
for (j = tile_map[i].size; j >= 0; j--): // Changed loop condition here.
draw(
tile_map[i][j],
x = (j * tile_width / 2) + (i * tile_width / 2)
y = (i * tile_height / 2) - (j * tile_height / 2)
)
উপরের ফিক্সের সাথে মানচিত্রের রেন্ডারিং সংশোধন করা উচিত:
"জিগ-জাগ" পদ্ধতির:
সুবিধা:
সম্ভবত "জিগ-জাগ" পদ্ধতির সুবিধা হ'ল রেন্ডার করা মানচিত্রটি "হীরা" পদ্ধতির চেয়ে কিছুটা উল্লম্বভাবে কমপ্যাক্ট বলে মনে হতে পারে:
অসুবিধা:
জিগ-জাগ কৌশলটি বাস্তবায়নের চেষ্টা করা থেকে, অসুবিধাটি হতে পারে যে রেন্ডারিং কোডটি লেখার জন্য কিছুটা কঠিন কারণ এটি for
অ্যারেতে প্রতিটি উপাদানকে নেস্টেড- লুপের মতো সহজ করে লেখা যায় না :
tile_map[][] = [[...],...]
for (i = 0; i < tile_map.size; i++):
if i is odd:
offset_x = tile_width / 2
else:
offset_x = 0
for (j = 0; j < tile_map[i].size; j++):
draw(
tile_map[i][j],
x = (j * tile_width) + offset_x,
y = i * tile_height / 2
)
এছাড়াও, রেন্ডারিং ক্রমের স্থির প্রকৃতির কারণে কোনও টাইলের স্থানাঙ্কটি বের করার চেষ্টা করা কিছুটা কঠিন হতে পারে:
দ্রষ্টব্য: এই উত্তরের অন্তর্ভুক্ত চিত্রগুলি টাইল রেন্ডারিং কোড উপস্থাপিত জাভা প্রয়োগের সাথে তৈরি int
করা হয়েছে, মানচিত্র হিসাবে নিম্নলিখিত অ্যারে সহ :
tileMap = new int[][] {
{0, 1, 2, 3},
{3, 2, 1, 0},
{0, 0, 1, 1},
{2, 2, 3, 3}
};
টাইল চিত্রগুলি হল:
tileImage[0] ->
ভিতরে একটি বাক্স সহ একটি বাক্স।
tileImage[1] ->
একটি কালো বাক্স।
tileImage[2] ->
একটি সাদা বাক্স।
tileImage[3] ->
এটিতে একটি লম্বা ধূসর রঙের একটি বাক্স।
টাইল প্রস্থ এবং উচ্চতা একটি নোট
ভেরিয়েবল tile_width
এবং tile_height
যা উপরের কোড উদাহরণ ব্যবহার করা হয় প্রস্থ এবং ইমেজ টালি প্রতিনিধিত্বমূলক মাটির টালি উচ্চতা উল্লেখ করুন:
চিত্রের মাত্রা এবং টাইলের মাত্রাগুলি যতক্ষণ মিলবে ততক্ষণ চিত্র ব্যবহার করবে। অন্যথায়, টাইল মানচিত্র টাইলস মধ্যে ফাঁক দিয়ে রেন্ডার করা যেতে পারে।