का उपयोग करके स्प्राइट के बाउंडिंग बॉक्स (अल्फा मास्क) के अंदर स्पर्श का पता लगाना मैं स्प्राइटकिट का उपयोग करके आईओएस पर विकसित करने के लिए स्विफ्ट 2 सीखना शुरू कर रहा हूं और मुझे लगता है कि अगर मैंने अपने स्प्राइट के दृश्य भाग को छुआ तो मुझे पता नहीं लगाया जा सकता है।SpriteKit
मैं पा सकते हैं जो नोड इस तरह छुआ था:
let touchedNode = self.nodeAtPoint(location)
लेकिन इस स्प्राइट पर स्पर्श का पता लगाने। मैं केवल स्प्राइट के "पारदर्शी" भाग पर स्पर्श का पता लगाना चाहता हूं।
मैं एक अल्फा मुखौटा बाउंडिंग बॉक्स के साथ एक PhysicsBody बनाने और जांच करना है कि नोड मेरे द्वारा चुने गए के बाउंडिंग बॉक्स इस तरह स्पर्श के स्थान शामिल करने की कोशिश की:
sprite.physicsBody = SKPhysicsBody.init(texture: sprite.texture!, size: sprite.size)
sprite.physicsBody?.affectedByGravity = false
if (touchedNode.containsPoint(location)){
लेकिन यह मदद नहीं की। अगर मैं अपने स्प्राइट के पारदर्शी हिस्से में क्लिक करता हूं, तो ईवेंट अभी भी ट्रिगर होता है।
प्रलेखन कहता है "एक नया भौतिकी निकाय बनाया गया है जिसमें बनावट में सभी ग्रंथ शामिल हैं जिनमें nonzero अल्फा मान है।", तो क्या यह काम नहीं करना चाहिए?
आपके समय के लिए धन्यवाद।
पीएस: मैंने अपने अल्फा थ्रेसहोल्ड पर अधिक उदार होने की भी कोशिश की, लेकिन यह भी काम नहीं किया (अगर मेरी पारदर्शिता सही नहीं थी)।
अद्यतन:
थोड़ा और अधिक विवरण जोड़ने के लिए, मैं एक स्तर संपादक का निर्माण कर रहा हूँ। इसका मतलब यह है कि उपयोगकर्ता द्वारा चुने गए विकल्पों के आधार पर, मैं कई नोड्स बनाउंगा, और मुझे उन नोड्स को चुनने/स्थानांतरित/घुमाने/सक्षम करने में सक्षम होना चाहिए। मैं वास्तव में एसकेएसप्रेट नोड्स का उपयोग कर रहा हूं क्योंकि मेरी पीएनजी चित्रों को स्वचालित रूप से एक्सकैसेट में जोड़ा जाता है। मैंने भौतिकी बॉडी के अल्फा मास्क बाउंडिंग बॉक्स का उपयोग करने का निर्णय लिया, क्योंकि जब आप नोड का चयन करते हैं, और जब चयनित होता है, तो यह मान दृश्य संपादक (एक्सकोड) में दिखाया जाता है, और अल्फा मास्क बिल्कुल मेरे स्प्राइट का हिस्सा हाइलाइट करता है जिसे मैं सक्षम करना चाहता हूं अंदर एक स्पर्श का पता लगाएं।
यदि मैं गलत विचार/तकनीकों का उपयोग कर रहा हूं, तो कृपया मुझे बताएं। यह संभव है क्योंकि मैं केवल स्विफ्ट और स्प्राइटकिट का उपयोग शुरू कर रहा हूं।
अद्यतन 2
मैं physicsWord पूछे (के रूप में सिफारिश) सही physicsBody पाने के लिए और इस तरह संलग्न नोड का नाम मिल गया:
let body = self.physicsWorld.bodyAtPoint(location)
print(body?.node?.name)
लेकिन यह अभी भी प्रिंट कर रहा है नोड का नाम, भले ही मैं बाउंडिंग बॉक्स के बाहर छूता हूं, जो मुझे समझ में नहीं आता है।
आपकी मदद के लिए वैसे भी धन्यवाद।
क्या आपको ऐसा करने का अच्छा तरीका मिला है? – Confused