我有一个用SpriteKit构建的游戏,我正在尝试为iPhone X调整它的大小。
这是我的初始设置代码:
override func viewDidLoad() {
super.viewDidLoad()
authenticateLocalPlayer()
var isiphonex = false
if UIDevice().userInterfaceIdiom == .phone {
if UIScreen.main.nativeBounds.height == 2436{
isiphonex=true
}
}
let skView = self.view as! SKView
if(isiphonex){
if #available(iOS 11.0, *) {
print("ios11")
skView.frame = CGRect(x: 39 , y: 0, width: 667, height: skView.safeAreaLayoutGuide.layoutFrame.height)
} else {
// Fallback on earlier versions
}
}
let startScene = StartScene(size:skView.bounds.size)
startScene.anchorPoint = CGPoint(x: 0.0892857, y: 0)
skView.showsFPS = false
skView.showsNodeCount = false
skView.ignoresSiblingOrder = true
startScene.scaleMode = .resizeFill
skView.presentScene(startScene)
}
然后当场景加载时我这样做:
override func didMove(to view: SKView) {
print(scene?.size.width)
print(view.bounds.size.width)
print(scene!.view!.bounds.size.width)
}
他们都打印667
但是当我试图在触摸过程中改变场景并执行此操作时:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(scene!.size.width)
print(scene!.view!.bounds.size.width)
}
他们都打印812。为什么会这样,我怎样才能让它留在667?
答案 0 :(得分:0)
答案 1 :(得分:0)
显然,改变ViewController的主要场景的大小只会导致它恢复到原始大小。为了解决这个问题,我创建了一个新的SKView,并将其作为子视图添加到ViewController的主视图中。然后我在新的SKView中展示了我所有的SKSCenes