我有一个方法可以创建一个在屏幕上移动的对象,并且我经常运行这个方法来生成很多对象,但我现在无法做的就是在需要时删除它们。我试过了
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]))
}
我如何删除所有"怪物"我需要时立即节点?
答案 0 :(得分:0)
要立即删除每个怪物节点,您可以使用SKNode的enumerateChildNodesWithName:usingBlock:方法,如下所示:
self.enumerateChildNodesWithName("monster") {
node, stop in
node.removeAllActions()
node.removeFromParent()
}
在这里,self是一个场景,因为你已经将怪物添加到了场景中。例如,如果您将怪物添加到某个容器节点,那么您应该在该节点上运行此方法,例如。 containerNode.enumerateChildNodesWithName("monster"){...}