有可能是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中設置。