का उपयोग करके टकराव से वस्तुओं को रोकें। मैं स्प्राइटकिट की विशेषताओं का परीक्षण कर रहा हूं और मैं एक समस्या में भाग गया। मैं थोड़ा मास्क, टकराव, श्रेणी, और संपर्क में पढ़ रहा था। मुझे लगता है कि वे क्या हैं, ज्यादातर कम से कम, मुझे श्रेणी बिटमैस्क का बिंदु नहीं मिलता है, लेकिन मुझे टकमास्क टकराव मिलते हैं जिन्हें मुझे अपनी समस्या को हल करने की आवश्यकता होती है।स्प्राइटकिट
ठीक है तो मेरी समस्या यह है कि मेरे पास दो अलग-अलग प्रकार के sprites हैं: ऑब्जेक्ट और सेकंड। नाम वास्तव में ज्यादा समझ में नहीं आता है लेकिन यह सिर्फ परीक्षण के लिए है। मैं चाहता हूं कि दूसरा आवेग हो, और मैं वस्तु को बल देना चाहता हूं। मैं sprites पर संबंधित वैक्टर लागू करने में सक्षम था, लेकिन मैं नहीं चाहता कि वे एक दूसरे के साथ टकराने के लिए। मैं चाहता हूं कि वे एक-दूसरे के अस्तित्व से गुज़रें और अनदेखा करें।
मैं एक दूसरे से अलग टक्कर bitmasks बताए द्वारा कि इस मुद्दे को हल करने की कोशिश की:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let texture = SKTexture(imageNamed: "pokeball")
let object = SKSpriteNode(texture: texture)
object.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: object.size.width,height: object.size.height))
object.physicsBody?.affectedByGravity = false
object.yScale = 0.5
object.xScale = 0.5
for t in touches {
object.position = t.location(in: self)
}
self.addChild(object)
object.physicsBody?.collisionBitMask = UInt32(4)
object.physicsBody?.applyForce(CGVector(dx: 0, dy: 10))
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let texture = SKTexture(imageNamed: "purple")
let second = SKSpriteNode(texture: texture)
let impulse : Double = 20
let x = (impulse * Double(cosf(45)))
let y = Double(impulse * Double(sinf(45)))
let vector = CGVector(dx: x, dy: y)
second.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: second.size.width,height: second.size.height))
second.yScale = 1.5
second.xScale = 1.5
second.physicsBody?.isDynamic = true
for t in touches {
second.position = t.location(in: self)
}
self.addChild(second)
second.physicsBody?.collisionBitMask = UInt32(1)
second.physicsBody?.applyImpulse(vector)
}
तो वस्तु 4 का बिटमास्क है:
object.physicsBody?.collisionBitMask = UInt32(4)
और दूसरा 1 का बिटमास्क है:
second.physicsBody?.collisionBitMask = UInt32(1)
मैंने सिम्युलेटर चलाया और वे अभी भी एक-दूसरे के साथ टकराने लगे हैं, इसलिए मैं ऑनलाइन गया और लू कुछ उत्तरों के लिए: मुझे एक ऐसा लगता है जो मुझे लगता है कि मुझे संख्याओं का उपयोग करना चाहिए:
ये बिटमास्क हैं, आप मनमानी संख्याओं का उपयोग नहीं कर सकते हैं 1,2,3,4,5 - आपको 1,2 का उपयोग करना होगा, 4,8,16 और इसी तरह -
क्या कोई समझा सकता है क्यों? अभी भी टकराने: हालांकि, कि इस मुद्दे क्योंकि मैं 1 और 4 उपयोग कर रहा था
अगला सवाल मैं में भाग कहा कि मैं द्विआधारी संख्या (0100) और (0010) का इस्तेमाल किया था, मैं उन्हें करने की कोशिश की, एक ही मुद्दा नहीं था। Collisions
क्या किसी को पता है कि क्यों यह हो रहा है:
मैं टकराव की एक तस्वीर छोड़ देंगे? अग्रिम में मेरी माफी माँगती है अगर यह वास्तव में गूंगा गलती है या कुछ जो पहले से ही पूछा जा चुका है, तो मुझे बस यह नहीं मिला।
इस पर एक नज़र डालें: http://stackoverflow.com/a/39064710/3402095 श्रेणी बिट मास्क का डिफ़ॉल्ट मान देखें। यह सब वहाँ समझाया गया है। – Whirlwind
निर्दिष्ट करना कि एक भौतिकी निकाय का टकराव है 4 का बिटमैस्क का मतलब है कि यह भौतिकी के साथ टकराता है, जिनकी श्रेणी 4 बिटबैस्क है (वास्तव में उस पर '4' बिट सेट है, लेकिन चलिए सबसे सरल उदाहरण से शुरू करते हैं)। यदि आपने किसी भी श्रेणी बिटमैस्क को देखकर परेशान नहीं किया है, तो चीजें काम नहीं करने जा रही हैं। –