Swift在碰撞后移除1个节点

时间:2017-03-20 21:52:55

标签: swift sprite-kit

我每隔一秒左右就会从屏幕顶部掉落节点。 当播放器(在屏幕底部)与下降节点发生碰撞时,我希望从屏幕上移除该特定节点,但让另一个节点继续下降。

我认为调用node.removeFromParent()可能会执行此操作,也可能会删除所有节点,但无论如何都不会发生任何事情。

这就是我所拥有的:

让节点落下:

func makeMete() {

    let meteTexture = SKTexture(imageNamed: "mete.png")
    let movementAmount = arc4random() % UInt32(self.frame.width)
    let meteOffset = CGFloat(movementAmount) - self.frame.width / 2
    let moveMete = SKAction.move(by: CGVector(dx: 0, dy: -2 * self.frame.height), duration: TimeInterval(self.frame.height / 300))

    let mete = SKSpriteNode(texture: meteTexture)
    mete.position = CGPoint(x: self.frame.midX + meteOffset, y: self.frame.midY + self.frame.height / 2)

    mete.physicsBody = SKPhysicsBody(circleOfRadius: meteTexture.size().height / 2)
    mete.physicsBody!.isDynamic = false
    mete.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
    mete.physicsBody!.categoryBitMask = ColliderType.object.rawValue
    mete.physicsBody!.collisionBitMask = ColliderType.object.rawValue

    mete.run(moveMete)
    self.addChild(mete)




}

检测联系人:

 func didBegin(_ contact: SKPhysicsContact) {

    if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue {



    player.physicsBody!.velocity = CGVector(dx: 0, dy: 0)
    isUserInteractionEnabled = false

   mete.removeFromParent()


    }
当屏幕上有一个节点时,

.removeFromParent()似乎只适用于我。不管怎样它还不起作用。

1 个答案:

答案 0 :(得分:2)

如果你使用mete它引用实际的对象mete,我假设屏幕上有很多metes。尝试从物理主体中引用实际节点并从父节点中删除它。

替换

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue {

player.physicsBody!.velocity = CGVector(dx: 0, dy: 0)
isUserInteractionEnabled = false
mete.removeFromParent()

}

使用

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue  {

        contact.bodyA.node?.removeFromParent()

}else if contact.bodyB.categoryBitMask == ColliderType.object.rawValue {
        contact.bodyB.node?.removeFromParent()
    }

.node允许您访问相关的实际实例。

祝你好运!