使用SKTransition

时间:2018-03-25 06:03:14

标签: ios swift sprite-kit

我是swift和Spritekit的初学者,我现在有两个UIViewController:LevelSelectViewController和GameViewController。后者应根据我在LevelSelectViewController场景中单击的按钮启动不同的SKScene。

LevelSelectViewController中有一个UI按钮,当单击它时会显示GameViewController,然后启动AdditionScene。

在AdditionScene中有一个SKSpriteNode,当点击它时,引用GameViewController并调用其backToLevel方法转到LevelSelectViewController。当满足某些条件时,场景也将加载新的AdditionScene。

通常,视图控制器和场景之间的转换按预期运行。

我的问题是,当我从GameViewController返回LevelSelectViewController然后重新进入GameViewController时,GameScene将不会在条件满足时加载新场景并且屏幕会在当前场景冻结。

我检查并发现新场景已初始化并加载,但屏幕只是卡住了。

此外,如果我在presentScene方法调用中省略了SKTransition,则解决了屏幕冻结问题,尽管它没有过渡动画。

现在我不知道是什么导致了这个错误以及如何解决它,除了报废不希望的SKTransition。

以下是转换到GameViewController并告诉它加载AdditionScene的方法:

@IBAction func toAdditionLevel(_ sender: UIButton) {
    let viewController:GameViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "GameViewController1") as! GameViewController
    viewController.gameType = "addition"
    self.present(viewController, animated: true, completion: nil)
}

这是跳回levelSelectController的方法:

func backToLevel() {
    let viewController:LevelSelectController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "levelSelectController") as! LevelSelectController
    self.present(viewController, animated: true, completion: nil)
}

以下是我在GameViewController中加载AdditionScene的方法:

            let scene = AdditionScene(size: skView.frame.size)
            scene.game_delegate = self
            scene.winningStreak = 0
            scene.scaleMode = .aspectFill
            skView.presentScene(scene)

以下是AdditionScenes:

之间的过渡
        let newScene = AdditionScene(size: self.size)
        newScene.game_delegate = self.game_delegate
        newScene.winningStreak = self.winningStreak!+1
        newScene.scaleMode = .aspectFill
        print("before presenting scene")
        let transition = SKTransition.moveIn(with: .right, duration: 1)
        transition.pausesOutgoingScene = true
        self.scene?.view?.presentScene(newScene, transition: transition)

如果你这样做的话             self.scene?.view?.presentScene(newScene)

屏幕冻结没有问题,但没有用于加载场景的动画。

0 个答案:

没有答案