【问题标题】:SpriteKit having trouble removing nodes from sceneSpriteKit 无法从场景中移除节点
【发布时间】:2016-04-22 10:22:47
【问题描述】:

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

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

如何在需要时一次删除每个“怪物”节点?

【问题讨论】:

    标签: sprite-kit


    【解决方案1】:

    要一次删除所有怪物节点,您可以使用 SKNode 的enumerateChildNodesWithName:usingBlock: 方法,如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2023-03-12
      相关资源
      最近更新 更多