swift skspritenodes colide甚至认为没有碰撞位掩码

时间:2017-01-07 02:23:54

标签: swift sprite-kit collision skspritenode

scorenode = SKSpriteNode()
    scorenode.size = CGSize(width: self.frame.width * 0.2, height: 1)
    scorenode.physicsBody = SKPhysicsBody(rectangleOf: scorenode.size)
    scorenode.color = .red
    scorenode.physicsBody?.affectedByGravity = false
    scorenode.physicsBody?.isDynamic = false

    scorenode.physicsBody?.categoryBitMask = PhysicsCategory.score
    scorenode.physicsBody?.contactTestBitMask = PhysicsCategory.circle
    scorenode.physicsBody?.collisionBitMask = 0


    obstaclePair = SKNode()
    obstaclePair.name = "obstaclePair"

    rightObstacle = SKSpriteNode(imageNamed:"square")
    rightObstacle.size = CGSize(width: self.frame.width * 0.8, height: self.frame.height / 10)

    rightObstacle.color = oColor
    rightObstacle.colorBlendFactor = 1.0
    rightObstacle.physicsBody = SKPhysicsBody(rectangleOf: rightObstacle.size)

    rightObstacle.physicsBody?.categoryBitMask = PhysicsCategory.obstacle
    rightObstacle.physicsBody?.collisionBitMask = PhysicsCategory.circle
    rightObstacle.physicsBody?.contactTestBitMask = PhysicsCategory.circle
    rightObstacle.physicsBody?.isDynamic = false

    leftObstacle = SKSpriteNode(imageNamed:"square")
    leftObstacle.size = CGSize(width: self.frame.width * 0.8 , height: self.frame.height / 10)
    leftObstacle.physicsBody = SKPhysicsBody(rectangleOf: leftObstacle.size)

    leftObstacle.color = oColor
    leftObstacle.colorBlendFactor = 1.0
    leftObstacle.physicsBody?.categoryBitMask = PhysicsCategory.obstacle
    leftObstacle.physicsBody?.collisionBitMask = PhysicsCategory.circle
    leftObstacle.physicsBody?.contactTestBitMask = PhysicsCategory.circle
    leftObstacle.physicsBody?.isDynamic = false
    circle = SKSpriteNode(imageNamed: "Circle")


circle.size = CGSize(width: 50, height: 50)
    circle.position = CGPoint(x: self.frame.width / 2, y: self .frame.height / 4)
    circle.color = .blue
    circle.colorBlendFactor = 1.0
    circle.physicsBody = SKPhysicsBody(circleOfRadius: circle.frame.height / 2)
    circle.physicsBody?.categoryBitMask = PhysicsCategory.circle
    circle.physicsBody?.collisionBitMask = PhysicsCategory.obstacle
    circle.physicsBody?.contactTestBitMask = PhysicsCategory.obstacle | PhysicsCategory.score
    circle.physicsBody?.affectedByGravity = false
    circle.physicsBody?.isDynamic = true
    circle.zPosition = 10

这是我项目的物理部分,我有一个Circle SKSpritenode和一个得分节点SKSpritenode。他们不应该碰撞,我没有给他们两个碰撞位掩码,但他们仍然碰撞。我做错了什么?

2 个答案:

答案 0 :(得分:2)

你有

 static let circle : UInt32 = 0x1 << 1
 static let obstacle : UInt32 = 0x1 << 1
 static let score : UInt32 = 0x1 << 1

你需要

static let circle : UInt32 = 0x1 << 0
static let obstacle : UInt32 = 0x1 << 1
static let score : UInt32 = 0x1 << 2

答案 1 :(得分:0)

如果你没有做任何与得分节点有关的物理学,为什么不把它作为标签节点并从中删除物理。