2017-04-13 15 views
1

我有一棵樹是由一系列關節構成的。錨是樹的基部/樹樁。我的英雄目前無法穿過主播。設置collisionBitMask = 0對錨點不起作用,但該方法適用於單個關節段。你如何通過Spritekit聯合錨?

所以,基本上我只是想避免這種衝突。下面是代碼:

//錨代碼

let chunkHolder = SKSpriteNode(imageNamed: ImageName.ChunkHolder) 
chunkHolder.position = anchorPoint 

chunkHolder.physicsBody = SKPhysicsBody(circleOfRadius: chunkHolder.size.width/2) 
chunkHolder.physicsBody?.isDynamic = false 
chunkHolder.physicsBody?.categoryBitMask = PhysicsCategory.chunkAnchor.rawValue 
chunkHolder.physicsBody?.collisionBitMask = 0 

addChild(chunkHolder) 

//個別樹鏈段,其中英雄正確穿過:

for i in 0..<length { 
    let treeSegment = SKSpriteNode(imageNamed: ImageName.ChunkTexture) 
    let offset = treeSegment.size.height * CGFloat(i + 1) 
    treeSegment.position = CGPoint(x: anchorPoint.x, y: anchorPoint.y - offset) 
    treeSegment.name = "tree" + String(i) 

    treeSegments.append(treeSegment) 
    addChild(treeSegment) 

    treeSegment.physicsBody = SKPhysicsBody(rectangleOf: treeSegment.size) 
    treeSegment.physicsBody?.collisionBitMask = 0 
} 

//關節

for i in 1..<length { 
     let nodeA = treeSegments[i - 1] 
    let nodeB = treeSegments[i] 
    let joint = SKPhysicsJointPin.joint(withBodyA: nodeA.physicsBody!, bodyB: nodeB.physicsBody!, anchor: CGPoint(x: nodeA.frame.midX, y: nodeA.frame.minY)) 

    scene.physicsWorld.add(joint) 
} 

//作爲參考,這裏是英雄的物理機構:

self.physicsBody?.categoryBitMask = PhysicsCategory.hero.rawValue 
self.physicsBody?.contactTestBitMask = PhysicsCategory.ground.rawValue 

同時將英雄的collisionBitMask設置爲0目前不會有幫助,因爲那時英雄也會穿過地面/地板。

+0

解決我還是想禁用碰撞,但一個方便的技巧是對物理學的車身尺寸設置爲1,英雄只是走了過來很好。 –

回答

0

這是由categoryBitMask也設置爲0

chunkHolder.physicsBody?.categoryBitMask = 0 
chunkHolder.physicsBody?.collisionBitMask = 0