2017-09-15 91 views
8

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

紅色部分是場景內容。一個有趣的事情是,背景(這是藍色和灰色,確實得到正確顯示)

無論如何解決這個問題?我很好,只是伸展場景來填充顯示屏(不會有任何東西了由圓角和缺口)

回答

0

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

0

aspectFill工作正常,我該場景被夾在左邊和右邊,但它不失真。

我已經SKView與自動版式自動調整大小,然後給你我場景填充場景。