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。

这是什么样子:

Picture

红色部分是场景内容。一个有趣的事情是,背景(这是蓝色和灰色,确实得到正确显示)

无论如何解决这个问题?我很好,只是伸展场景来填充显示屏(不会有任何东西了由圆角和缺口)

有可能是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与自动版式自动调整大小,然后给你我场景填充场景。