मैं सीधे बाहर आऊंगा और कहूँगा कि मुझे नहीं पता कि आप इस समस्या का समाधान कैसे कर सकते हैं जो आपने प्रश्न में वर्णित है (आइसो-टाइल के आकार के आयतों के बीच टकराव का पता लगाना), लेकिन मैं आपको बता सकता हूं कि दूसरों ने इसे अतीत में कैसे हल किया है :
जिस तरह से यह अन्य खेलों में किया जाता है वह खेल की दुनिया को स्क्रीन की दुनिया से अलग करना है । जब आप शुरुआत कर रहे होते हैं, तो उन्हें एक ही चीज़ होने की कल्पना करना आम बात है, लेकिन फिर यह उन समस्याओं की ओर ले जाता है, जिनका आप वर्णन कर रहे हैं।
सामान्य विचार यह है कि खेल की दुनिया को पूरी तरह से स्मृति में संग्रहीत किया जाता है, पर्दे के पीछे, यह सिर्फ संख्या, संदर्भ और तर्क है। तथ्य यह है कि आप आइसोमेट्री में खेल की दुनिया को आकर्षित कर रहे हैं अप्रासंगिक है। आपके गेम की दुनिया में आइसोमेट्रिक, या वर्गाकार की अवधारणा नहीं होनी चाहिए, या भले ही स्क्रीन को 3 डी के रूप में आकर्षित किया जा रहा हो। जब आप खेल की दुनिया को स्क्रीन (उर्फ स्क्रीन की दुनिया ) पर आकर्षित करते हैं, तो इस बात का ध्यान रखा जाता है । गेम की दुनिया को सबसे सरल तरीके से संग्रहीत और रखरखाव किया जाना चाहिए जो गेम के लिए, आइसोमेट्रिक गेम्स के लिए समझ में आता है, आप आमतौर पर इस तथ्य को पूरी तरह से अनदेखा करते हैं कि यह आइसो है और इसके बजाय पदों को स्टोर करें जैसे कि आप एक अक्ष-संरेखित ग्रिड का उपयोग कर रहे थे। अधिकांश खेलों में दो दुनियाओं के बीच समन्वय को परिवर्तित करने की विधियाँ होंगी, जिन्हें मैं कहता हूं ScreenToWorld(x, y)
औरWorldToScreen(x, y)
। रूपांतरण अक्सर मैट्रिक्स गणित के साथ किया जाता है, लेकिन अन्य तरीकों से हासिल किया जा सकता है। जब आप माउस का उपयोग करेंगे, तब आप स्क्रीनट्वर्ड का उपयोग करेंगे और जब आप ड्रा करेंगे तो वर्ल्डटॉक्स को।
गेम की दुनिया और स्क्रीन की दुनिया को विभाजित करने के कई फायदे हैं । एक लाभ यह है कि टक्कर का पता लगाने और आंदोलन सभी खेल की दुनिया में होता है, और इसलिए आमतौर पर काफी सीधे आगे होता है क्योंकि आप एक slanted ग्रिड, या तिरछे निर्देशांक के साथ काम नहीं कर रहे हैं, या जहां स्क्रीन है, आदि आपके मामले में। , आप अक्ष-संरेखित आयतों और वर्गों के साथ काम करेंगे। एक बार खेल की दुनिया को अपडेट कर दिया गया है, तो आप स्क्रीन, कीवर्ड: प्रतिनिधित्व के लिए खेल की दुनिया का प्रतिनिधित्व करते हैं। यह पहली बार में सहज ज्ञान युक्त लग सकता है, लेकिन आपकी स्क्रीन केवल इस बात का प्रतिनिधित्व करती है कि खेल की दुनिया में क्या चल रहा है। यह समर्पित सर्वर और टर्मिनल जैसे क्लाइंट को संभव बनाता है।
FreeCiv वास्तव में इन सभी चीजों का एक बड़ा उदाहरण है। आप किसी भी एक के रूप में एक ही सटीक दुनिया देख सकते हैं: एक वर्ग उत्तर / दक्षिण ग्रिड, आइसोमेट्रिक या हेक्स। आपके द्वारा चलाए जाने वाले प्रत्येक गेम में बैकग्राउंड में एक समर्पित सर्वर चलता है, यहां तक कि सिंगल-प्लेयर गेम्स के लिए भी, इसलिए क्लाइंट भी सिर्फ एक डिस्प्ले पोर्ट है, इससे ज्यादा कुछ नहीं।
लंबी कहानी छोटी: खेल की दुनिया और तर्क को स्क्रीन की दुनिया से अलग करना खेल तर्क को सरल करता है, खेल को कम करता है <-> प्रदर्शन युग्मन , और बदले में, "आइसो" टाइलों के बीच टकराव का पता लगाना आसान और संभालना आसान है।