Sprite Kit SKAction 组暂停应用程序

Sprite Kit SKAction Group Halting Application

我试图覆盖我的精灵中的 removeFromParent 操作,以便在移除精灵时,它首先 "explodes",但是,当我 运行 SKAction 组操作时,应用程序冻结并且退出。

有问题的代码如下:

class Trampoline: SKSpriteNode {
     override func removeFromParent() {
        //remove the physics body. The trampoline is essentially gone
        self.physicsBody = nil

        //create an array of explosion images from to animate
        var explosionAtlas: SKTextureAtlas = SKTextureAtlas(named: "explosion")
        var explosionFrames: [SKTexture] = [SKTexture]()
        var numImages: Int = explosionAtlas.textureNames.count
        var i = 1
        for (i = 1; i <= numImages; i++) {
            explosionFrames.append(explosionAtlas.textureNamed("explosion-\(i)"))
        }

        //execute the explodion and then deletion of the node
        let explosionAction = SKAction.animateWithTextures(explosionFrames, timePerFrame: 0.03, resize: true, restore: true)
        let removeAction = SKAction.removeFromParent()
        let group = SKAction.group([explosionAction, removeAction])
        self.runAction(group)
    }
}

当我 运行 只有爆炸动作时,一切正常(所以这不是我的纹理图集的问题)。爆炸显示和动画。但是,即使我 运行 只有 removeAction,应用程序也会冻结。 运行 他们作为一个整体立即冻结(甚至在爆炸动画发生之前)。

我使用的API错了吗?

这只是一个猜测。我有一个提示给你:

    yourSprite.removeFromParent()

并且在您的代码中使用:

    SKAction.removeFromParent()

我想你是说要删除 "self" 而不是你的节点:

yourNode.runAction(组)

已编辑

问题

你的问题是你正在创建一个无限循环。

您正在覆盖 removeFromParent,然后在 removeFromParent 内您使用 SKAction.removeFromParent() 调用 removeFromParent

您可以通过在 removeFromParent 中添加 println 或断点来自己观察无限循环,并查看它被调用了多少次。如果您等待 Xcode 杀死您的应用并查看调​​用堆栈,您还可以看到无限循环 - 它应该充满 removeFromParent.

解决方案

您应该将 removeAction 更改为:

let removeAction = SKAction.runBlock { super.removeFromParent() }

此更改意味着您让 SKSpriteNodeTrampolinesuper class)处理实际删除。

希望对您有所帮助!