我正在构建一个游戏,当玩家继续前进时障碍物继续出现在屏幕上。无论何时障碍物移动到摄像机的视野之外,它们都会被移除并产生新的。
我有一个函数,在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()
障碍后,我无法消除障碍。
我做错了什么?
答案 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() }
}