2016-02-12 5 views
5

स्प्राइटकिट SKPhysics में कोई भी ऑब्जेक्ट रखना संभव नहीं है, लेकिन आप वापस नहीं जा सकते।SpriteKit SKPhysics एक दिशा में एक दिशा में बॉडी टकराव आप केवल जा सकते हैं लेकिन

विचार यह है कि उनकी एक दिशा में कोई टक्कर नहीं है, इसलिए आप जाल के दरवाजे की तरह वापस जाते हैं और वापस नहीं जाते हैं।

उत्तर

1

मुझे यकीन नहीं है कि एक तरह से भौतिकी संभव है, लेकिन आप एक भौतिकी शरीर के टक्कर बिट मास्क के साथ गड़बड़ करने में सक्षम होना चाहिए जबकि गेम एक समान प्रभाव प्राप्त करने के लिए चल रहा है।

तो आपके पास खुले राज्य में आपका दरवाजा है, और जब यह पता लगाता है कि खिलाड़ी इसे छू रहा है *, यह थोड़ा मुखौटा बदलता है ताकि खिलाड़ी इसके साथ टकरा सके। इससे खिलाड़ी को एक तरफ से जाने की अनुमति मिलनी चाहिए, लेकिन वापस नहीं आना चाहिए।

* हकीकत में, दरवाजे का पता लगाने जब खिलाड़ी खिलाड़ी के भौतिक विज्ञान शरीर के माध्यम से दरवाजा छू नहीं रह गया है, और x या y स्थान अगर यह एक जाल दरवाजा, या नियमित रूप से दरवाजा है पर निर्भर करता है का परीक्षण किया है। यदि स्थान दरवाजे से काफी दूर है, तो दरवाजे के टकराव बिट मास्क को बदलें ताकि खिलाड़ी नहीं जा सके।

0

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

0

ऐसा करने का सबसे सरल तरीका होगा जाल के दरवाजे के ऊपर और नीचे प्रतिनिधित्व नोड में दो बच्चे sprites जोड़ने के लिए। इस तरह आप परीक्षण कर सकते हैं कि किस दिशा में एक टकराव स्प्राइट आ रहा है, और आवश्यकतानुसार गतिशीलता को सक्षम/अक्षम करें।

0

समाधान collisionBitMask बदलने के लिए बस है

func platformSolid() { 
    self.physicsBody?.collisionBitMask = kBIT_MASK_PLAYER | kBIT_MASK_WALL | kBIT_MASK_PLATFORM 
} 
func platformThrough() { 
    self.physicsBody?.collisionBitMask = kBIT_MASK_PLAYER | kBIT_MASK_WALL 
} 

इस उदाहरण में स्वयं खिलाड़ी टकराव बिट मास्क

प्रतिनिधि में है:

func didEndContact(contact: SKPhysicsContact) { 
    if contact.bodyB.categoryBitMask == kBIT_MASK_PLATFORM { 
     player.platformSolid() 
    } 
} 

तो एक बार खिलाड़ी बीत चुका है (didEndContact) आप मंच (दरवाजा) ठोस बनाते हैं।

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