你如何通过Spritekit联合锚点?

时间:2017-04-13 17:40:22

标签: sprite-kit skphysicsjoint

我的树是由一系列关节构成的。锚是树的基础/树桩。我的英雄目前无法穿过锚点。设置collisionBitMask = 0不适用于锚点,但该方法适用于各个关节段。

所以,基本上我只想避免这种碰撞。这是代码:

//锚的代码

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)
}

//这里的参考是Hero的物理团体:

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

同时将英雄的collisionBitMask设置为0将无法帮助,因为那时英雄也将落在地面/地板上。

1 个答案:

答案 0 :(得分:0)

通过将categoryBitMask设置为0来解决此问题。

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