快速删除sprite /标签(removeallchildren)

时间:2015-03-11 15:44:04

标签: ios xcode swift skspritenode sklabelnode

我正在使用这些函数将sklabelnodes和skspritenodes添加到场景中:

var levelnode = SKSpriteNode()
var labelLevel = SKLabelNode(fontNamed: "Courier-Bold")

func addlevels(){
    var level = score + 1
    if (level > 0){
        sprite()
        levelnode.position = CGPointMake(frame.size.width / 2.2, -frame.size.height/15.6 - frame.size.height/17.6)
      levelnode.name = "1"
        addChild(levelnode)
         sklabel()
        labelLevel.text = ("1")
        labelLevel.position.x = levelnode.position.x - (levelnode.size.width/40)
        labelLevel.position.y = levelnode.position.y - (levelnode.size.width/6)
        labelLevel.name = "1"
        addChild(labelLevel)
      }
    if (level > 1){
        sprite()
        levelnode.position = CGPointMake(frame.size.width / 1.42 - frame.size.width/100, -frame.size.height/10 - frame.size.height/17.6)
        levelnode.name = "2"
        addChild(levelnode)
        sklabel()
        labelLevel.text = ("2")
        labelLevel.position.x = levelnode.position.x - (levelnode.size.width/40)
        labelLevel.position.y = levelnode.position.y - (levelnode.size.width/6)
        labelLevel.name = "2"
        addChild(labelLevel)
    }
// this goes on and on till level 25
}

func sprite(){
    levelnode = SKSpriteNode(imageNamed: "levelnode")
    levelnode.size.width = frame.size.width / 8
    levelnode.size.height = levelnode.size.width
    levelnode.zPosition = 1
}

func sklabel(){
    labelLevel = SKLabelNode(fontNamed: "Courier-Bold")

    labelLevel.zPosition = 2
    labelLevel.fontColor = SKColor.blackColor()
    labelLevel.fontSize = frame.size.height / 35
}

当我更改场景时,会从willmovefromview函数中删除精灵和标签:

override func willMoveFromView(view: SKView) {
    removeAllChildren()
}

但如果我把它与其他更多skspritenode添加的场景进行比较,这个速度太慢了。

我认为它与我添加精灵和标签的功能有关,但它有什么问题?

编辑: 将菜单带回菜单的功能:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    errint = false
    for touch: AnyObject in touches {

        let location: CGPoint! = touch.locationInNode(self)

        let nodeAtPoint = self.nodeAtPoint(location)

        if (nodeAtPoint.name != nil) {

            if nodeAtPoint.name == "menu" {
removeallAction()
removeAllChildren()
                var scene1 = GameMenuScene(size: self.size)
                scene1.button = self.button
                scene1.button2 = self.button2
                scene1.button3 = self.button3
                scene1.viewController = self.viewController
                let transition = SKTransition.moveInWithDirection(SKTransitionDirection.Left, duration: 0.75)
                self.view?.presentScene(scene1, transition: transition)

            }

        }
    }
}

1 个答案:

答案 0 :(得分:0)

不转换到另一个场景会取消分配当前场景吗?

如果该场景被解除分配,那么就不需要删除节点......

你可以帮我一个忙,不过去掉孩子和行动就转过来,然后过渡回来看看是否重要?

无论如何,如果你在模拟器上进行测试,速度是微不足道的...模拟器实际上只模拟了SpriteKit的核心opengl。

请在您的设备上试用。

顺便说一下,我不确定是什么东西,但似乎没有人回答你所以我试过......

编辑: 上帝的圣母为什么我没有看到时间,因为它已经过了两个月了。

现在我觉得太迟了......但是对于任何阅读此内容的人来说,请不要在凌晨2点回答问题。