切换场景错误

时间:2016-10-17 18:21:09

标签: ios swift

我正在尝试创建一个小游戏但是当应用切换到游戏场景时(按下重启按钮时),此游戏场景将无法正确加载。它会给出一个错误:thread 1 exc_bad_instruction(code = exc_i386_invop subcode = 0x0)。整个游戏在开始时工作正常(如果我还没有死)但是当我死的时候我会用一个重启按钮进入另一个场景,一旦按下这个重启按钮,我将再次进入游戏。我甚至不会得到正确的背景等。

代码:

游戏场景(在此部分中将发生错误)

    func enemySpawn() {

    let enemy = SKSpriteNode(imageNamed: "Enemy")

    let minValue = self.size.width / 8
    let maxValue = self.size.width - 150

    let spawnPoint = UInt32(maxValue - minValue) // HERE IS THE ERROR

    enemy.position = CGPoint(x: CGFloat(arc4random_uniform(spawnPoint)), y: self.size.height)

    enemy.physicsBody = SKPhysicsBody(rectangleOf: enemy.size)
    enemy.physicsBody?.affectedByGravity = false
    enemy.physicsBody?.categoryBitMask = physicsCatagory.enemy
    enemy.physicsBody?.contactTestBitMask = physicsCatagory.bullet
    enemy.physicsBody?.isDynamic = true

    let action = SKAction.moveTo(y: -70, duration: TimeInterval(enemyMoveSpeed))
    let actionDone = SKAction.removeFromParent()
    enemy.run(SKAction.sequence([action, actionDone]))

    self.addChild(enemy)
}

这是重启场景:

var restartButton : UIButton!

override func didMove(to view: SKView) {

    scene?.backgroundColor = UIColor.white

    restartButton = UIButton(frame: CGRect(x: 0, y: 0, width: view.frame.size.width / 3, height: 30))
    restartButton.center = CGPoint(x: view.frame.size.width / 2, y: view.frame.size.height / 7)

    restartButton.setTitle("Play Again", for: UIControlState.normal)
    restartButton.setTitleColor(UIColor.black, for: UIControlState.normal)
    restartButton.addTarget(self, action: #selector(StartViewController.restart), for: UIControlEvents.touchUpInside)

    self.view?.addSubview(restartButton)
}

func restart() {
    self.view?.presentScene(GameScene(), transition: SKTransition.crossFade(withDuration: 0.3))
    restartButton.removeFromSuperview()
}

我希望有人能够帮助我! 谢谢!

1 个答案:

答案 0 :(得分:0)

我个人的印象是你从前一个(处理过的场景)中得到了错误,但我可能错了......

let nextScene = GameScene(size: self.scene.size)
        nextScene.scaleMode = SKSceneScaleMode.AspectFill

        self.view?.presentScene(nextScene, transition: transition)

我会将大小传递给GameScene,而不是默认构造函数。