快速删除精灵/标签(removeallchildren)

Posted

技术标签:

【中文标题】快速删除精灵/标签(removeallchildren)【英文标题】:Removing sprites/labels slow in swift (removeallchildren) 【发布时间】:2015-03-11 15:44:04 【问题描述】:

我正在使用这些功能将 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()

但是如果我将它与添加更多 skspritenodes 的其他场景进行比较,这太慢了..

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

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

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】:

过渡到另一个场景不会释放当前场景吗?

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

您能帮我一个忙,在不删除子项和操作的情况下过渡出去,然后过渡回来看看是否重要?

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

请在您的设备上试用。

顺便说一句,我不确定,但似乎没有人回答你,所以我尝试了......

编辑: 圣母,为什么我没有看到两个月前问的时间戳

现在我想为时已晚...但是对于阅读本文的任何人,不要在凌晨 2 点回答问题。

【讨论】:

以上是关于快速删除精灵/标签(removeallchildren)的主要内容,如果未能解决你的问题,请参考以下文章

infinity新标签页失效

如何快速执行一个函数 5 秒

使用 CCSpriteFrameCache 为动画精灵添加标签

具有阻尼效果的快速动画精灵

three.js 2D 文本精灵标签

有没有快速删除 vscode 中的 HTML 标签对的方法?