如何在Swift中删除Sprite Kit中的所有节点?

时间:2016-06-27 15:59:50

标签: swift sprite-kit

我有一个游戏,其中与敌人的联系结束游戏但是当我在敌人节点上使用removeFromParent时它只删除最近的一个。使用switch语句生成敌人以确定他们从哪一侧进入并且一旦发生接触并且游戏结束,仍然存在的节点通过引起更多联系而弄乱游戏。如果用户没有按任何东西并且敌人在游戏期间通过屏幕完成他们的轨迹,那么问题就不会发生。

一旦游戏结束,我可以以任何方式杀死屏幕上的所有节点吗?我可以在结束屏幕中暂停输入3秒钟以完成操作吗?一旦游戏结束,我是否需要计算敌人,因为它们会逐一杀死它们?

我已经坚持了3天,并且会喜欢一些帮助。我想我解释得相当好,但如果我需要显示任何代码请问我会。顺便说一句,我很快乐。

3 个答案:

答案 0 :(得分:3)

在你的场景课中你可以写

// For all children
self.removeAllChildren()

// Removing Specific Children
for child in self.children { 

   //Determine Details
    If child.name == "bob" {
        child.removeFromParent 
    }
}

答案 1 :(得分:2)

您可以使用SKNode方法removeAllChildren()。把它叫做敌人'父节点。如果是场景,则呼叫应为scene.removeAllChildren()

答案 2 :(得分:1)

枚举可能是最好的方法。我会给你所有的敌人一个名字

let enemyName = "Enemy" // make it a property to avoid typos

myEnemySprite.name = enemyName

如果你想删除一组特定的敌人,你可以枚举场景并删除它们

enumerateChildNodesWithName(enemyName) { (node, _) in
     node.removeFromParent()
}

注意:如果你的敌人是另一个节点的孩子(例如enemyNode)而不是场景,你必须像这样枚举

enemyNode.enumerateChildNodesWithName(enemyName) { (node, _) in
    node.removeFromParent()
}

或者,您可以在将所有敌人添加到场景后将其置于阵列中。

创建数组

var enemiesArray = [SKSpriteNode]()

并且除了你添加到场景中的每个敌人之外,你还要将它们添加到数组中

 addChild(yourEnemy1Sprite)
 enemiesArray.append(yourEnemy1Sprite)

现在,如果你想删除它们,你可以这样做

for enemy in enemiesArray {
   enemy.removeFromParent()
   // clear array as well if needed
}

希望这有帮助