访问在for循环中创建的spritenodes?

时间:2015-12-03 20:30:49

标签: ios swift sprite-kit

我正在构建一个游戏,当玩家继续前进时障碍物继续出现在屏幕上。无论何时障碍物移动到摄像机的视野之外,它们都会被移除并产生新的。

我有一个函数,在didMoveToView()中调用一次,在if语句中的update()函数中调用一次:

if theCamera.containedNodeSet().count < 2 {}

这是功能:

 func addNewBlocks(number: Int, playerPosition: CGPoint) {


    if existingBlocks.count == 0 {
        updatePointArray(number, playerPosition: playerPosition)

        for index in 0...3 {

            let block = Obstacle()
            block.position = pointArray[index]
            block.name = "block\(index)"
            self.addChild(block)
            existingBlocks.append(block)
            print("adding blocks")
        }

    } else if existingBlocks.count > 0 {
        for index in 0...3 {
            self.childNodeWithName("block\(index)")?.removeFromParent()
        }
    }
}

它需要两个参数:一个数字 - 产生障碍的数量和当前玩家的位置。

我的问题是,在最初添加didMoveToView()障碍后,我无法消除障碍。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

尝试使用此功能删除屏幕中不包含的节点:

func didSimulatePhysics() {
self.enumerateChildNodesWithName(@"YOUR_NODE_NAME", usingBlock: {
    (node: SKNode, stop: Bool) -> Void in 
    if !CGRectContainsPoint(CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height), node.position) {
        node.removeFromParent()
    }
})}

答案 1 :(得分:0)

此函数应删除每个不可见的节点。

private func removeNodesOutsideTheCamera() {
    self.children
        .filter { self.camera?.containedNodeSet().contains($0) == false }
        .forEach { $0.removeFromParent() }
}