因此,Stack Overflow上有几十个关于在iPhone X上正确拟合SpriteKit场景的问题。但是,我找不到任何有差距的人。
有没有我可以只为iPhone X调整屏幕大小?或者我是否必须创建另一个场景,JUST让iPhone X适合屏幕?
我希望将该场景延伸到凹槽下方,并在屏幕角落曲线的正上方。我看到许多游戏非常适合,但还没有找到合适的解决方案。
注意:我无法使用aspectFill
,因为游戏的某些部分不在视野范围内。
非常感谢任何链接或答案!
修改
resizeFill
太大了,一切都变大了
我已经尝试了所有4个选项来调整屏幕大小,但没有人完成这项工作。有人有建议吗?
我觉得解决方案将以务实的方式完成,因为它需要相对于这些边界。
答案 0 :(得分:0)
将此添加到您的代码中,它将为iPhone X和常规iPhone设置可玩游戏区域,然后使用gameArea常量来定义可以移动的距离。
//MARK: Playable Game Araa
let gameArea: CGRect
override init(size: CGSize) {
if UIDevice().userInterfaceIdiom == .phone && UIScreen.main.nativeBounds.height == 2436 {
//iPhone X
let maxAspectRatio: CGFloat = 19.5/9.0
let playableWidth = size.height / maxAspectRatio
let margin = (size.width - playableWidth) / 2
gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
} else {
let maxAspectRatio: CGFloat = 16.0/9.0
let playableWidth = size.height / maxAspectRatio
let margin = (size.width - playableWidth) / 2
gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
}
super.init(size: size)
}
答案 1 :(得分:0)
我们(我和snapbackdev)找到了一个解决方案,适用于现在或任何未来的手机,可以将屏幕设置为适合整个视图,而无需拉伸或空格。
我们最终以编程方式完成所有工作,这使一切正常。
在GameViewController.swift
中,此代码加载GameScene
:
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
// Load a GameScene with the size of the view
let scene = GameScene(size: view.frame.size)
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
// Present the scene
view.presentScene(scene)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
这也可以在viewDidLayoutSubviews
中完成,具体取决于您正在做什么。
在GameScene.swift
中设置场景所需的唯一代码是:
override func didMove(to view: SKView) {
// Set (0, 0) as the centre of the screen
scene?.anchorPoint = CGPoint(x: 0.5, y: 0.5)
// Create the frame
let frameEdge = SKPhysicsBody(edgeLoopFrom: frame)
self.physicsBody = frameEdge
}