Swift SpriteKit : Thread 1: EXC_BAD_ACCESS on addChild? 我做错了什么?

标签 swift sprite-kit

我有一个游戏,当你死后,你点击游戏应该重新启动,但每当我点击重新启动时,它都会给我这个(见上文)错误。提前致谢(:

这是我的代码:

class MCTFruitGen: SKSpriteNode {
    var generationTimer: NSTimer!
    var fruits = [MCTFruit]()
    var fruitTracker = [MCTFruit]()

    func startGeneratingFruitEvery(seconds: NSTimeInterval) {
        generationTimer = NSTimer.scheduledTimerWithTimeInterval(seconds, target: self, selector: "generateFruit", userInfo: nil, repeats: true)
    }

    func stopGenerating() {
        generationTimer?.invalidate()
    }

    func generateFruit() {
        var scale: CGFloat
        let rand = arc4random_uniform(2)
        if rand == 0 {
            scale = -1.0
        } else {
            scale = 1.0
        }

        let strawberry = MCTFruit()
        strawberry.position.x = size.width/2 + strawberry.size.width/2
        strawberry.position.y = scale * (NMCGroundHeight/160 + strawberry.size.height)

        self.fruits.append(strawberry)
        fruitTracker.append(fruits)
        addChild(strawberry) // line that gives me the error
    }

    func stopFruit() {
        stopGenerating()
        for fruit in fruits {
            fruit.stopFruitMoving()
        }
    }
}

最佳答案

尝试使用 SKAction 而不是 NSTimer 来生成水果或 SpriteKit 中的任何计时事件。例如

class MCTFruitGen: SKSpriteNode {
    var fruits = [MCTFruit]()
    var fruitTracker = [MCTFruit]()

    func startGeneratingFruitEvery(seconds: NSTimeInterval) {

        let callGenerateAction = SKAction.runBlock { () -> Void in
            self.generateFruit()
        }

        let waitOneSecond = SKAction.waitForDuration(seconds)

        let sequenceAction = SKAction.sequence([callGenerateAction, waitOneSecond])

        let fruitGeneratorAction = SKAction.repeatActionForever(sequenceAction)

        self.runAction(fruitGeneratorAction, withKey: "fruitGenerator")
    }

    func stopGenerating() {
        self.removeActionForKey("fruitGenerator");
    }

    func generateFruit() {
        // Your Code
    }

    func stopFruit() {
        stopGenerating()
        // Your Code
    }
}

关于Swift SpriteKit : Thread 1: EXC_BAD_ACCESS on addChild? 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32418589/

相关文章:

ios - 在捕获列表中使用 unowned 导致崩溃,即使 block 本身没有执行

ios - skscene UIViewController 从 SKScene 发送短信

ios - Swift - UITabBarController 作为 ChildViewController 不工作

swift - 将枚举类型的值与关联值进行比较时出现编译器错误?

ios - 如何设置 NSAttributedString 范围?

ios - 快速调整属性的方法

ios - 如何将实例变量分配给SKSpriteNode?

swift - SpriteKit 场景编辑器

swift - 为什么没有 Swift 等效项来向 View 添加操作?

ios - 检测并忽略 iAd 横幅上的触摸