अद्यतन: सही नक्शा प्रतिपादन एल्गोरिथ्म, और अधिक चित्रण जोड़ा गया, परिवर्तित स्वरूप।
शायद टाइल को स्क्रीन पर मैप करने के लिए "ज़िग-ज़ैग" तकनीक के लिए लाभ यह कहा जा सकता है कि टाइल की 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
टाइल की छवि का प्रतिनिधित्व करते हुए ग्राउंड टाइल की चौड़ाई और ऊंचाई का उल्लेख करते हैं:
छवि के आयामों का उपयोग करना काम करेगा, जब तक कि छवि आयाम और टाइल आयाम मेल खाते हैं। अन्यथा, टाइल मानचित्र को टाइलों के बीच अंतराल के साथ प्रदान किया जा सकता है।