2015-10-16 8 views
6

का उपयोग करके स्प्राइट के बाउंडिंग बॉक्स (अल्फा मास्क) के अंदर स्पर्श का पता लगाना मैं स्प्राइटकिट का उपयोग करके आईओएस पर विकसित करने के लिए स्विफ्ट 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) 

लेकिन यह अभी भी प्रिंट कर रहा है नोड का नाम, भले ही मैं बाउंडिंग बॉक्स के बाहर छूता हूं, जो मुझे समझ में नहीं आता है।

आपकी मदद के लिए वैसे भी धन्यवाद।

+0

क्या आपको ऐसा करने का अच्छा तरीका मिला है? – Confused

उत्तर

2

SKPhysicsBodySKNode की सीमाओं को परिभाषित नहीं करता है। आप bodyAtPoint पर कॉल करके अपने दृश्य के SKPhysicsWorld से पूछकर हिट चेक कर सकते हैं। वह SKPhysicsBody लौटाएगा जिसमें आप रुचि रखते हैं।

+0

ऐसा लगता है कि यह कमरे में हाथी से परहेज करेगा। क्या मैं इसे गलत तरीके से कर रहा हूं? दृश्य के objets पर अपने बाध्यकारी बॉक्स (अल्फा मुखौटा) से स्पर्श का पता लगाने के लिए क्या अच्छा अभ्यास है?मेरा मतलब है, यह समाधान स्पष्ट रूप से मेरे पास एक और मौलिक समस्या के आसपास एक हैक है, है ना? वैसे भी आपके धैर्य के लिए धन्यवाद। –

+0

मेरा संपादित उत्तर बेहतर है और SKSpriteNodes पर छूने का पता लगाने का "सही" तरीका प्रतीत होता है –

+0

हम, मैंने "self.physicsWorld.bodyAtPoint (स्थान)" करने का प्रयास किया और यह मेरे स्प्राइट को ठीक उसी तरह देता है, परवाह नहीं करता बाध्यकारी बॉक्स, भले ही मेरा बाउंडिंग बॉक्स सही है (मैं ओबेट को ले जाकर इसका परीक्षण कर सकता हूं, यह अल्फा मास्क किए गए बाउंडिंग बॉक्स का उपयोग करके अन्य ओबेट्स के साथ सही ढंग से टकराता है, जिसे मैं स्पर्श करने का प्रयास कर रहा हूं)। –

संबंधित मुद्दे