आसन्न टाइलों के आधार पर टाइल चुनें


10

मैं एक टाइल वाले मानचित्र संपादक पर काम कर रहा हूं, और मुझे आसन्न टाइलों के आधार पर, स्वचालित रूप से टाइल चुनने की आवश्यकता है। उदाहरण के लिए, रोड टाइल लगाते समय, दूसरी रोड टाइल के बगल में, दोनों को उन्मुख करने की आवश्यकता होती है ताकि वे एक सतत सड़क का निर्माण करें। यदि उनके आसपास अन्य सड़कें हैं, तो हमें कोने या चौराहे की टाइलों का उपयोग करने की आवश्यकता हो सकती है।

किसी को भी ऐसा करने के लिए कुछ एल्गोरिदम की सिफारिश कर सकते हैं? खेल एक 8-दिशात्मक वर्ग टाइल नक्शा का उपयोग करता है।


जब भी उपयोगकर्ता नई टाइल लगाता है, तो आप आसपास की सभी 8 टाइलों की जांच नहीं कर सकते, और नई टाइल को उसी के अनुसार उन्मुख कर सकते हैं? बेशक आपको प्रत्येक टाइल पर कुछ अतिरिक्त जानकारी संग्रहीत करने की आवश्यकता होगी जैसे कि अभिविन्यास और प्रकार।
जिओचुआन यू

मैं सभी आसपास की टाइलों की जांच कर रहा हूं, लेकिन मुझे नहीं पता था कि सभी टाइल संयोजनों को कैसे संभालना है। उदाहरण के लिए, आपके पास (क्षैतिज, ऊर्ध्वाधर, चार कोनों, और एक क्रॉस) से चुनने के लिए सात संभव टाइलें हैं। मैंने जटिल स्विच स्टेटमेंट का उपयोग करने के बारे में सोचा, लेकिन यह गलत लगा।
एलेकॉप

जवाबों:


18

शायद यह है कि यह आमतौर पर कैसे किया जाता है। आपके पास विभिन्न टाइलों की अपनी सूची है जो उनके सभी संभावित झुकावों में एक सड़क टाइल का प्रतिनिधित्व करते हैं। बाएं से दाएं, सभी चार कोने, ऊपर से नीचे, जो भी हो। अब आप उन सभी टाइलों को एक-एक बाइट के साथ अनुक्रमित करेंगे। 8 बिट्स, प्रत्येक दिशा के लिए एक। यह एक हैशमैप या फ़ाइल नाम से हो सकता है ... हालाँकि आप ऐसा करना चाहते हैं।

तो आपके पास यह है:

यहाँ छवि विवरण दर्ज करें

उपरोक्त टाइल के लिए बाइट कोड 00000000 है । फिर आपकी टाइल जो बाएं से दाएं (या बाएं से दाएं) जाती है वह इस प्रकार है:

यहाँ छवि विवरण दर्ज करें

उस टाइल के लिए बाइट कोड 10001000 , या 136 है। एक अन्य उदाहरण के रूप में, तीन तरह से चौराहे पर नज़र डालते हैं:

यहाँ छवि विवरण दर्ज करें

उस टाइल के लिए बाइट कोड 10101000 है

आप शायद देखते हैं कि मैं कहाँ जा रहा हूँ। आप बाइट का प्रतिनिधित्व करने वाले कनेक्शनों में बिट स्थिति निर्धारित करते हैं। यह कुछ बड़ा करने की कोशिश करने से कहीं बेहतर है अगर / जो श्रृंखला मैंने पहले देखी हो। जब आप एक टाइल लगाने के लिए देख रहे हैं, तो इसके चारों ओर टाइल की जांच करें और रास्ते में एक बाइट बनाएं। उन टाइलों के लिए 1 सेट करें जिनकी सड़कें हैं (या जो भी आप कनेक्ट करना चाहते हैं) और 0 उन टाइलों के लिए जो नहीं हैं। जब आप काम पूरा कर लेते हैं, तो आपके पास आवश्यक टाइल के लिए बाइट कोड होगा।

ध्यान दें कि संपत्ति बनाते समय आप उनमें से बहुत से पुन: उपयोग कर सकते हैं और इसे सही बाइट कोड असाइन करके घुमा सकते हैं।

संपादित करें : कम गंदे होने के लिए अद्यतित चित्र। हां वो पहले से बेहतर हैं।


बहुत अच्छा! सरल और कुशल। केवल एक चीज जो मुझे समझ में नहीं आती है कि आप कैसे उन बिटमास्क को प्राप्त कर रहे हैं। उदाहरण के लिए, आप 3 और 7 की संख्या से 17 का बिटमास्क कैसे प्राप्त कर रहे हैं?
alekop

कोई बात नहीं, मैं देख रहा हूं कि आप क्या कर रहे हैं। आप बिट्स 3 और 7 सेट कर रहे हैं, लेकिन आप दाईं ओर के बजाय बाईं ओर से गिनती कर रहे हैं।
अलेकॉप

अरे वाह, कितना शर्मनाक। मेरा अंतस मिला दिया। यह एक दुर्घटना थी जिसे मैं ठीक कर दूंगा!
MichaelHouse

महान, अब मेरी टिप्पणी का कोई मतलब नहीं है! : पी जस्ट किडिंग, आपके उत्तर के लिए धन्यवाद। ठीक वैसा ही मैं देख रहा था।
एलेकॉप

1
अच्छे खर्च। मेरे पास वास्तविक कोड और टाइल रिज़ॉल्यूशन के साथ समान तकनीक को कवर करने वाला एक ब्लॉग पोस्ट है: kitsu.github.io/2016/07/18/roguelike-project-05
kitsu.eb

3

मैं आपको अधिक जानकारी के लिए इस उपयोगी पृष्ठ पर एक नज़र डालने की सलाह दूंगा, क्योंकि यह आपके द्वारा किए जा रहे हर पहलू के बारे में और साथ ही साथ कुछ संभावित अनुकूलन के बारे में बहुत विस्तार से बताता है: http://www.angryfishstudios.com / 2011/04 / रोमांच में bitmasking /

Tldr यह है कि आप प्रत्येक आसन्न सेल को क्वेरी करते हैं और संयोजन को एक बिटफील्ड / बाइट में संग्रहीत करते हैं, फिर इसे एक मानचित्र के माध्यम से पास करते हैं जो 0 ~ 255 से एक संख्या को 0 ~ 47 से एक मान में परिवर्तित करता है, जो एक अनूठी छवि से मेल खाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.