मैं हीरे के आकार की दुनिया में प्लॉट (दुनिया-> स्क्रीन) और माउस पिक (वर्ल्ड-> स्क्रीन) आइसोमेट्रिक टाइल्स बनाने के फॉर्मूले की तलाश में हूं। जिन लोगों को मैंने हमेशा कोशिश की है वे ठीक-ठाक लगते हैं। ऐसा करने का सामान्य / सही तरीका क्या है?
मैं हीरे के आकार की दुनिया में प्लॉट (दुनिया-> स्क्रीन) और माउस पिक (वर्ल्ड-> स्क्रीन) आइसोमेट्रिक टाइल्स बनाने के फॉर्मूले की तलाश में हूं। जिन लोगों को मैंने हमेशा कोशिश की है वे ठीक-ठाक लगते हैं। ऐसा करने का सामान्य / सही तरीका क्या है?
जवाबों:
आपकी टिप्पणी के आधार पर, यहां टाइल कोड, y मान को स्क्रीन निर्देशांक पर परिवर्तित करने के लिए उपयोग किया जा रहा कोड है। अब, यह "3 डी टाइल्स" को ध्यान में नहीं रखता है, सब कुछ एक ही विमान पर होने के रूप में माना जाता है, इसलिए यदि आप एक गेम लिख रहे हैं जहां यह मायने रखता है, तो यह कोड काम नहीं करेगा।
//this converts a map x/y coordinate into screen coordinates
//public, static method, so can be called outside the Tile object
point Tile::convertToScreen(int x, int y, int offsetX, int offsetY)
{
point screen;
//calculate the screen coordinates
//note: these will then be modified by the camera
screen.x = offsetX - (y * TILE_WIDTH/2) + (x * TILE_WIDTH/2) - (TILE_WIDTH/2);
screen.y = offsetY + (y * TILE_DEPTH/2) + (x * TILE_DEPTH/2);
return screen;
}
बिंदु केवल x और y ints युक्त संरचना है, TILE_WIDTH आपके मामले में 64 होगी, TILE_DEPTH बुरी तरह से नामांकित है (यह वास्तव में टाइल ग्राफिक्स की ऊंचाई है), लेकिन यह आपके मामले में 32 होगा। यदि आप चाहते हैं कि आपके टाइल का नक्शा अलग-अलग x, y स्थान पर (जैसे कि यदि आप चाहते हैं कि टाइलें टाइल के किसी अन्य सेट से ऊपर हों) तो आप चाहते हैं। आमतौर पर ऑफसेट 0,0 हो सकते हैं।
यह इस तरह से शीर्ष, मध्य पर 0,0 के साथ एक मानचित्र उत्पन्न करेगा:
0,0
0,1 1,0
0,2 1,1 2,1
कर्सर के टाइल x, y को खोजने के लिए:
point selectedTile;
int x = mX - camera.x;
int y = mY - camera.y;
selectedTile.x = (y + x/2)/TILE_DEPTH;
selectedTile.y = (y - x/2)/TILE_DEPTH;
इस बिट कोड में, mX और mY माउस स्क्रीन निर्देशांक हैं, जिसे हम कैमरा मान के साथ जोड़ रहे हैं ताकि पता लगाया जा सके कि हम "विश्व निर्देशांक" में कहाँ हैं। बाकी सब कुछ पिछले कोड उदाहरण के समान है।
एक बार फिर, यह एक फ्लैट 2d सममितीय टाइल मानचित्र मान लेता है। यदि आप मानचित्र के अर्ध-3D दृश्य का उपयोग करना चाहते हैं, तो कुछ अतिरिक्त काम हैं, और यह सब मान लेता है कि आप वैसे भी 2d में काम कर रहे हैं।