如何改变呈现前SKScene位置?

问题描述 投票:1回答:1

我想根据游戏运行在设备上调整SKScene位置。例如,由于iPhone XS最大的“顶尖”区域,我需要减去SKScene高度高度场面相应的位置。

因此,这里是我如何计算高度又名在safeAreaHeight AppDelegate,并从现场高度又名sceneHeight减:

    safeAreaHeight = UIApplication.shared.statusBarFrame.size.height
    sceneHeight -= safeAreaHeight

GameViewController我尝试重新定位SKScene象下面这样:

    if let view = self.view as! SKView? {
        // Load the SKScene from 'MainMenuScene.sks'
        if let scene = SKScene(fileNamed: "MainMenuScene") {
            // Set the scale mode to scale to fit the window
            scene.scaleMode = .aspectFit
            scene.size.height = sceneHeight
            scene.size.width = sceneWidth
            scene.position.y -= safeAreaHeight
            // Present the scene
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true
        view.showsFPS = true
        view.showsNodeCount = true
    }

不过,我得到以下错误:

SKScene:设置SKScene的位置没有影响。

此外,我试图用SKAction移动SKScene的位置,以及,然后我下面错误接收:

SKScene:动画一个SKScene的位置没有影响。

感谢您的帮助。

swift sprite-kit skscene iphone-xs-max
1个回答
1
投票

嗯,我想出如何实现这一点,我在情况下,它会帮助别人分享。

里面AppDelegate你得到了正确的安全区域值,并将其存储在一个单(在我的情况:safeAreaHeight)为整个应用程序的访问。减去场景高度(sceneHeight)的量。

    let kWindow = UIApplication.shared.windows[0]
    safeAreaHeight = kWindow.safeAreaInsets.top + kWindow.safeAreaInsets.bottom
    screenHeight = screenRect.size.height - safeAreaHeight

不要忘记它呈现前调整GameViewController的sceneHeight

    if let view = self.view as! SKView? {
        // Load the SKScene from 'MainMenuScene.sks'
        if let scene = SKScene(fileNamed: "MainMenuScene") {
            // Set the scale mode to scale to fit the window
            scene.scaleMode = .aspectFit
            scene.size.height = sceneHeight
            scene.size.width = sceneWidth
            // Present the scene
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true
        view.showsFPS = true
        view.showsNodeCount = true
    }

里面装的场景,在这种情况下,MainMenuScene,你只需找到SKScene的子视图,并通过在其中心减去safeAreaHeight调整其Y位置

    guard let subView = self.view else { return }
    subView.center.y -= safeAreaHeight

PS:不要调整不同场景(即:GameScene,GameOverScene等)各方面的意见一旦调整,但它仍然在整个应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.