我想根据游戏运行在设备上调整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的位置没有影响。
感谢您的帮助。
嗯,我想出如何实现这一点,我在情况下,它会帮助别人分享。
里面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等)各方面的意见一旦调整,但它仍然在整个应用程序。