我正在尝试创建一个小游戏但是当应用切换到游戏场景时(按下重启按钮时),此游戏场景将无法正确加载。它会给出一个错误: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()
}
我希望有人能够帮助我! 谢谢!
答案 0 :(得分:0)
我个人的印象是你从前一个(处理过的场景)中得到了错误,但我可能错了......
let nextScene = GameScene(size: self.scene.size)
nextScene.scaleMode = SKSceneScaleMode.AspectFill
self.view?.presentScene(nextScene, transition: transition)
我会将大小传递给GameScene,而不是默认构造函数。