【问题标题】:How to set the scalemode of a scene when I transit into it?过渡到场景时如何设置场景的比例模式?
【发布时间】:2015-09-30 15:25:46
【问题描述】:

我的问题是当我试图切换到一个场景时,它是我开始场景时的不同视图。

问题是 - 我认为 - 缩放模式,所以我尝试设置缩放模式但它不起作用。这是我尝试过的:

let skView = self.view! as SKView

let gameScene:GameScene = GameScene(size: self.frame.size)
gameScene.size = skView.bounds.size
gameScene.scaleMode = SKSceneScaleMode.ResizeFill

skView.presentScene(gameScene , transition: SKTransition.crossFadeWithDuration(1))

还有这个:

let gameScene = GameScene(size: self.size)

gameScene.scaleMode = SKSceneScaleMode.ResizeFill

self.view?.scene!.presentScene(gameScene , transition: SKTransition.crossFadeWithDuration(1))

我已经尝试在didMoveToView()函数中设置场景的缩放模式。

这些方法都没有帮助,有帮助吗?

【问题讨论】:

  • 上面的代码在你的 GameViewController 中?
  • 节点按钮中的开始场景中没有
  • 控制器中的缩放模式为Resizefill
  • 如何在 GameViewController 中初始化第一个场景?正确初始化后,无需再更改场景大小。
  • 目前我的游戏“GameMenu”和“GameScene”中有两个场景,我想将游戏菜单场景作为我的第一个场景,这就是我在游戏控制器中初始化它的方式

标签: ios sprite-kit swift2 skscene


【解决方案1】:

这是从一个场景过渡到另一个场景的示例。假设 GameMenu 是您的第一个场景,并且您想要过渡到 GameScene。

在GameViewController中初始化GameMenu大小:

override func viewDidLoad() {
    super.viewDidLoad()

    let scene = GameMenu(size: view.bounds.size)
    // 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)
}

现在,您应该在第一个场景。何时过渡到GameScene,根据需要添加以下代码:

let nextScene = GameScene(size: self.size)
scene?.view?.presentScene(nextScene, transition: SKTransition.crossFadeWithDuration(1))

现在一切都完成了,GameScene 出现了。如果您有任何问题,请查看此sample project。

【讨论】:

  • 你是否在“let scene = GameMenu(size: view.bounds.size)”这一行中的“let”之前错过了“if”,或者你打算让它变成这样?
  • @AdeebAbaza 只需删除 if 语句
  • #1 变量在自己的初始值内使用
  • #2 调用中的额外参数“大小”
  • @AdeebAbaza 错误发生在哪个文件中?我的代码在某处与您的代码冲突吗?尝试自己修复它,至少您可以运行我附加的示例项目并与您的代码进行比较。
【解决方案2】:
override func viewDidLoad() {
        super.viewDidLoad()

        if let scene = GameMenu(fileNamed:"GameMenu") {
            // 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 = .ResizeFill

            skView.presentScene(scene)
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多