मैं जावा में एक 2 डी खेल बना रहा हूं बैठक के लिए Java2D लाइब्रेरी का उपयोग कर, और मैं वास्तव में एक नाव परिशुद्धता बहुभुज वस्तु की जरूरत है कि मैं खेल वस्तुओं आकर्षित करने के लिए दोनों का उपयोग कर सकते हैं और उन पर टक्कर पता लगाने क्या करना । दुर्भाग्यवश, जावा की पॉलीगॉन ऑब्जेक्ट केवल int परिशुद्धता में आती है, और आयताकार और आयताकार 2 डी के साथ समान समकक्ष पॉलीगॉन 2 डी नहीं है। मैंने यह देखने के लिए पहले से ही पर्याप्त शोध किया है कि मेरे पास कुछ विकल्प हैं, लेकिन उनमें से कोई भी बहुत अच्छा प्रतीत नहीं होता है।कार्यान्वयन Polygon2D 2 डी
Path2D का प्रयोग करें। this forum में जावा डेवलपर पोस्टिंग के अनुसार, पॉलीगॉन 2 डी की कमी एक निरीक्षण थी, लेकिन इसका सुझाया गया प्रतिस्थापन पथ 2 डी है। दुर्भाग्यवश, पथ 2 डी टकराव का पता लगाने के लिए अपनी व्यक्तिगत शिखर या किनारों तक पहुंचने का एक तरीका प्रदान नहीं करता है (विशेष रूप से मुझे प्रत्येक किनारे पर वेक्टर ऑर्थोगोनल प्राप्त करने की आवश्यकता होती है)।
मेरे अपने Polygon2D कि आकार इंटरफ़ेस लागू करता है को लागू करें ताकि मैं अभी भी
Graphics2D.draw(Shape)
करने के लिए इसे पारित कर सकते हैं। ऐसा लगता है कि यह बहुत मुश्किल होगा। आकार इंटरफ़ेस कोcontains(Rectangle2D)
औरgetPathIterator(AffineTransform)
जैसे कठिन-से-लागू विधियों की आवश्यकता होती है। विशेष रूप सेgetPathIterator
के लिए, ऐसा लगता है कि इसे कार्यान्वित करने के लिए मुझे पथ प्रकार के प्रकार को वापस करने की आवश्यकता होगी, लेकिन सार्वजनिक एडब्ल्यूटी पैकेज में उपलब्ध पथइंटर इंटरफ़ेस का कोई ठोस कार्यान्वयन नहीं है।किसी ऑब्जेक्ट में लपेटें पथ 2 डी जो व्यक्तिगत वर्टिस को "याद करता है" और उन्हें क्लाइंट को प्रदान करता है। यह मेरे लिए काम करता था जब मुझे एक ऐसे क्षेत्र की आवश्यकता होती थी जिसने इसके घटक आकार को याद किया: मैंने इसे कंपाउंडशिप कक्षा में लपेट लिया जिसने आकार इंटरफ़ेस को कार्यान्वित किया और क्षेत्र के कार्यान्वयन के लिए सभी आकार विधियों को अग्रेषित किया, जबकि प्रत्येक आकार को ट्रैक करने के दौरान एक ArrayList में क्षेत्र। इसके साथ समस्या यह है कि यदि मैं
float
एस के दो एरे में अलग-अलग शिखरों का ट्रैक रखता हूं, तो उपयोगकर्ता को उनको उजागर करने की संभावना के बिना उपयोगकर्ता को बेनकाब करने का कोई तरीका नहीं है - और क्योंकि यह प्रत्यक्ष सरणी पहुंच से होता है , आंतरिक पथ 2 डी परिवर्तनों के बारे में सूचित नहीं किया जाएगा।Polygon.java कॉपी करें। जावा की पॉलीगॉन क्लास का वास्तविक स्रोत कोड grepcode.com पर उपलब्ध है, और मैं पॉलीगॉन 2 डी प्राप्त करने के लिए पूरे
float
के साथ वर्टेक्स से संबंधितint
एस को प्रतिस्थापित कर सकता हूं। दुर्भाग्यवश, जब मैंने यह कोशिश की, तो लाइनimport sun.awt.geom.Crossings;
ने एक कंपाइलर त्रुटि फेंक दी और कहा कि "टाइप लाइब्रेरी आवश्यक लाइब्रेरी पर प्रतिबंध के कारण पहुंच योग्य नहीं है C: \ Program Files \ Java \ jre7 \ lib \ rt.jar।" this question के अनुसार ऐसा होता है क्योंकि सूर्य का लाइसेंस समझौता आपको कोर जावा क्लास को अपने आप से बदलने से रोकता है, लेकिन पॉलीगॉन ऐसा करने की कोशिश नहीं करता है - यह बस सूर्य का प्रकार ऑब्जेक्ट बनाता है sun.awt.geom.Crossings, कोई प्रतिस्थापन या विस्तार नहीं होता , और मैंने पॉलीगॉन की अपनी प्रतिलिपि को पैकेज में "जावा" नहीं कहा है।
इसके साथ आगे बढ़ने का सबसे अच्छा तरीका क्या है? मैं इन सुझावों में से किसी एक को कैसे काम करता हूं या किसी अन्य विकल्प के लिए एक विचार बनाने के लिए सुझावों की सराहना करता हूं जिसमें इन मुठभेड़ों की समस्या नहीं है।
Google पर [जावा पॉलीगॉन 2 डी] (https://www.google.com/search?q=java+polygon2d&ie=utf-8&oe=utf-8&client=ubuntu&channel=fs) के लिए खोज [मुझे यह साइट] (http : //www.koders.com/java/fid058B5904198EB5BA18B9B086CC3B953F96CD2750.aspx) जो डबल-परिशुद्धता का उपयोग करके 'पॉलीगॉन 2 डी' है)। – dacwe
ऐसा लगता है कि पॉलीगॉन 2 डी कोड sun.awt.geom.Crossings का भी उपयोग करता है, इसलिए इसे 'पॉलीगॉन' की प्रतिलिपि बनाने के प्रयास के रूप में वही समस्याएं होती हैं और इसे 'फ्लोट' का उपयोग करने के लिए बदलती हैं। – Edward