SpriteKit无法从场景中删除节点

时间:2016-01-17 02:44:22

标签: sprite-kit

我有一个方法可以创建一个在屏幕上移动的对象,并且我经常运行这个方法来生成很多对象,但我现在无法做的就是在需要时删除它们。我试过了

childNodeWithName("monster")?.removeFromParent() 

但这不起作用,他们仍然完成了他们的行动。这是方法

func spawn() {

    let ran = Int(arc4random_uniform(1400));
    var  monster = SKSpriteNode(imageNamed: "spike")
    monster = SKSpriteNode(texture: text)
    monster.position = CGPoint(x: ran, y: 800);
    monster.zPosition = 1;
    monster.physicsBody = SKPhysicsBody(texture: text, size: text.size())
    monster.physicsBody?.categoryBitMask = PhysicsCategory.Monster
    monster.physicsBody?.contactTestBitMask = PhysicsCategory.Player
    monster.physicsBody?.collisionBitMask = 0
    monster.physicsBody?.dynamic = false
    monster.name = "monster"
    self.addChild(monster);

    let move = SKAction.moveTo(CGPointMake(monster.position.x, -100), duration: 1.5);
    let remove = SKAction.runBlock { () -> Void in
        monster.removeFromParent()
        self.score += 1
    }
    monster.runAction(SKAction.sequence([move,remove]))
}

我如何删除所有"怪物"我需要时立即节点?

1 个答案:

答案 0 :(得分:0)

要立即删除每个怪物节点,您可以使用SKNode的enumerateChildNodesWithName:usingBlock:方法,如下所示:

self.enumerateChildNodesWithName("monster") {
                        node, stop in

                        node.removeAllActions()
                        node.removeFromParent()                       
 }

在这里,self是一个场景,因为你已经将怪物添加到了场景中。例如,如果您将怪物添加到某个容器节点,那么您应该在该节点上运行此方法,例如。 containerNode.enumerateChildNodesWithName("monster"){...}