, поэтому я нашел несколько сообщений о переходе от Skscene к uiviewcontroller, и я получил его для работы. Этот segue и unind segue вызывается каждый раз, когда пользователь выигрывает уровень моей игры или проигрывает.Переход на viewController из SKScene нашел нуль при разворачивании необязательного значения
это работает для ровном1, но как только я выиграю level2 я получаю
fatal error: unexpectedly found nil while unwrapping an Optional value
на линии, где я называю игру над функцией ниже
в моей игровой сцене у меня есть:
class GameScene: SKScene, SKPhysicsContactDelegate {
//next level/try again segue
var viewController : GameViewController!
в GameViewController я инициализировать это свойство
var currentLevel: Int!
override func viewDidLoad() {
super.viewDidLoad()
currentLevel = gameScene.currentLevel
if let scene = GameScene.level(currentLevel) {
// Configure the view.
let skView = self.view as SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
//initialize VC
scene.viewController = self
}
func gameOver() {
performSegueWithIdentifier("gameOver", sender: nil)
}
@IBAction func perpareForUnwind(unwindSegue: UIStoryboardSegue) {
}
и, наконец, я называю GameOver из моей функции выигрыша() в gameScene
func newGame() {
view!.presentScene(GameScene.level(currentLevel))
}
func win() {
if (currentLevel < 3) {
currentLevel++
//present win view - with option to restart, next level, or home
}
println(currentLevel)
runAction(SKAction.sequence([SKAction.waitForDuration(2),
SKAction.runBlock(newGame)]))
self.viewController.gameOver() // this is the error!
}
Так это работает от ровном1 к level2, но не будут работать от level2 до LEVEL3
С viewDidLoad вызывается только один раз это только инициализируется от lvl1 до lvl2 и затем становится nil. Как я могу убедиться, что он инициализируется каждый раз. Shoud Я поставил этот код кода где-то, кроме viewDidLoad?
если я делаю что я получаю 'Receiver () не имеет SEGUE с идентификатором 'GameOver'' я удалил строки scene.viewController = сам от viewdidLoad и в didMoveToView добавил ViewController = GameViewController() –
Jeremy
Я думаю, это потому, что вы устанавливаете viewController на новый GameViewController. Вы должны установить его на существующий, попробуйте это: viewController = self.view.window.rootViewController –
нет, это не работает либо к сожалению! – Jeremy