游戏卡在iPhone Xs的安全区内

4

我更新了我的游戏,本以为它支持iPhone Xs和iPad 11英寸屏幕,因为在模拟器上完美地适配了屏幕(非常令人沮丧),但当在实际设备上测试时却不行。似乎根视图(即我的SKView)受到安全区域插图的限制。像这张图片一样,游戏场景也受到了限制。

enter image description here

我在UIViewController类中使用了这个方法将根视图设置为一个大小为设备屏幕的SKView。

override open func loadView() {

    view = SKView(frame: UIScreen.main.bounds)

}

首先创建一个与SKView具有相同宽高比(但大小不相同)的场景,然后让它自适应SKView。例如,对于iPhone X / Xs / XsMax / Xr,someSpecifiedSize将是(812,375),对于iPhone 5,6,7,8则为(667,375),对于所有iPad除了11英寸的iPad,大小为(667,500)。这可能很奇怪,但由于我的游戏性质,必须如此。

let scene = SKScene(size: someSpecifiedSize)
scene.scaleMode = .aspectFill

我不理解为什么视图包含安全区域,因为我在定义大小时没有使用插入物。我如何使SKView的大小与设备屏幕的大小相同,而不是安全区域的大小?

你尝试过使用控制器下的视图属性边界吗? - Vanya
不确定您的意思。您是指如何使用它们或在什么上使用它们? - KissTheCoder
你有没有在Storyboard中关闭安全区域? - Knight0fDragon
你确定你甚至没有使用默认的故事板吗?顺便说一句,我强烈建议使用故事板,更清晰简洁。 - Knight0fDragon
@Knight0fDragon 好的,我已经删除了Storyboard文件,并在目标的常规选项卡下的“主界面”字段中删除了对它的引用。我听说过Storyboard有很多问题,所以我更喜欢避免使用它。 - KissTheCoder
显示剩余2条评论
1个回答

1
这段代码实际上按照您的要求工作:

self.view = SKView(frame: view.bounds)
    let scene = SKScene(size: view.bounds.size)
    let skView = view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = true
    scene.scaleMode = .resizeFill
    scene.backgroundColor = .green
    skView.presentScene(scene)

您的问题似乎与变量“someSpecifiedSize”有关,我无法确定它实际上是什么,但我猜它遵循安全区域。

如果可能的话,我想避免使用resizeFill scaleMode,因为它会使场景在iPad上变得太大,导致物理行为与iPhone版本不同。我更新了问题以澄清“someSpecifiedSize”。 - KissTheCoder
@Muffinman2497 当你使用这段代码将scaleMode更改为aspectFill时,你可以得到完整的屏幕而不需要安全区域,因此结果与iPhone X系列相同。 - Vanya
除了调整大小填充会影响场景的尺寸,这意味着在每个设备上您提供的体验都是不同的。 - Knight0fDragon
同时,这破坏了约束条件并搞乱了故事板,除非情况得到更好的澄清,否则我会给它一个反对票。 - Knight0fDragon
@Knight0fDragon 不确定,但似乎Storyboard在这种情况下没有涉及,并且它也可以使用.aspectFill。 - Vanya
@Knight0fDragon 这个问题是关于如何使视图在安全区域的部分可见,而不是关于故事板、约束或游戏规则。 - Vanya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接