gpt4 book ai didi

ios - SpriteKit 场景不适合 iPhone X 上的整个 View

转载 作者:可可西里 更新时间:2023-11-01 03:19:04 25 4
gpt4 key购买 nike

iPhone X 于几天前发布。我正在尝试将我的一款游戏更新到新手机。但是,在一个带有 SpriteKit 场景的场景中,场景不会缩放以填满整个屏幕。

下面是显示场景的代码:

GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
scene.scaleMode = SKSceneScaleModeFill;
// skView is basically self.view casted to SKView
[skView presentScene:scene];

SKS文件中场景的大小为2048x1536。

这是它的样子:

Picture

红色部分为场景内容。一件有趣的事情是,背景(蓝色和灰色)确实可以正确显示。

要解决这个问题吗?我只需要拉伸(stretch)场景以填充显示器就可以了(不会有任何东西被圆角和凹口遮住)

最佳答案

SpriteKit 游戏可能有更简洁的方法来支持 iPhone X 屏幕,但我提出了以下 SKView 扩展:

public extension SKView {
func isIphoneX() -> Bool {
let screenHeight = 2436.0
let screenWidth = 1125.0
let iphoneXAspectRatio = screenHeight / screenWidth

let aspectRatio = Double(self.frame.width/self.frame.height)
return (aspectRatio == iphoneXAspectRatio) ? true : false
}
}

和用法:基本上它根据屏幕的宽高比设置缩放模式。如果是 iPhone X 宽高比,则将缩放模式设置为“resizeFill”,否则对于经典的矩形 iPhone 和 iPad 屏幕,请使用“aspectFill”模式。

import SpriteKit

class GameViewController: UIViewController {

// MARK: - View lifecycle
override func viewDidLoad() {
super.viewDidLoad()

guard let view = self.view as? SKView else { return }
guard let scene = SKScene(fileNamed: "sceneName") else { return }
scene.scaleMode = view.isIphoneX() ? .resizeFill : .aspectFill

view.presentScene(scene)
}
}

我发现 resizeFill 模式是使内容填满整个 iPhone X 屏幕而不会扭曲或裁剪场景内容的唯一方法。如果您在游戏中有一个 HUD 节点(分数、计数器、按钮等),您也需要对其进行更改!

override func didMove(to view: SKView) {
// Any additional setup...
...

if view.isIPhoneX {
hud = SKReferenceNode(fileNamed: "yourIPhoneXHUDScene")
} else {
hud = SKReferenceNode(fileNamed: "yourStandardHUDScene")
}

cam.addChild(hud)
}

在模拟器中针对每种 iPhone 屏幕尺寸(3.5"、4"、4.7"、5.5"、5.8")进行了测试。但是我不确定如何处理 Xcode 中设置的视网膜 iPad 尺寸 (2048 x 1536) 的游戏场景。

关于ios - SpriteKit 场景不适合 iPhone X 上的整个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com