SpriteKit场景不适合iPhone上的整个视图X
问题描述:
iPhone X在几天前发布。我正尝试将我的游戏之一更新为新手机。但是,在一个带有SpriteKit场景的场景中,场景不会缩放以填满整个屏幕。SpriteKit场景不适合iPhone上的整个视图X
这里是显示场景的代码:
GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
scene.scaleMode = SKSceneScaleModeFill;
// skView is basically self.view casted to SKView
[skView presentScene:scene];
场景的在SKS文件的大小是2048×1536。
这是什么样子:
红色部分是场景内容。一个有趣的事情是,背景(这是蓝色和灰色,确实得到正确显示)
无论如何解决这个问题?我很好,只是伸展场景来填充显示屏(不会有任何东西了由圆角和缺口)
答
有可能是SpriteKit游戏更清洁的方法来支持iPhone X的屏幕,但我想出了下面的扩展GameViewController:
import SpriteKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as? SKView {
if let scene = SKScene(fileNamed: "yourscenefilename") {
// Set the scale mode according to the device
if isIphoneX {
scene.scaleMode = .resizeFill
} else {
scene.scaleMode = .aspectFill
}
// Any additional setup...
...
// Present the scene
view.presentScene(scene)
}
}
}
}
extension GameViewController {
var isIphoneX: Bool {
let aspectRatio = Double(view.frame.width/view.frame.height)
let iphoneXAspectRatio = 2436.0/1125.0
return (aspectRatio == iphoneXAspectRatio) ? true : false
}
}
基本上它集根据屏幕的宽高比进行缩放模式,如果是iPhone X宽高比,则将缩放模式设置为“resizeFill”否则对于经典的矩形iPhone和iPad屏幕使用“纵向填充”模式。
我发现resizeFill模式是使内容填充整个iPhone X屏幕而不扭曲或剪切场景内容的唯一方法。如果游戏中有HUD节点(比分,计数器,按钮等),则还需要对其进行更改!
override func didMove(to view: SKView) {
// Any additional setup...
...
if isIPhoneX {
hud = SKReferenceNode(fileNamed: "yourIPhoneXHUDScene")
} else {
hud = SKReferenceNode(fileNamed: "yourStandardHUDScene")
}
cam.addChild(hud)
}
测试与仿真每个iPhone的屏幕尺寸(3.5" ,4" ,4.7" ,5.5" ,5.8" )。 但是我不知道如何处理与视网膜iPad的尺寸gamescenes( 2048×1536)在Xcode中设置。
答
aspectFill工作正常,我该场景被夹在左边和右边,但它不失真。
我已经SKView与自动版式自动调整大小,然后给你我场景填充场景。