iPhone X几天前发布.我正在尝试将我的一个游戏更新到新手机.但是,在具有SpriteKit场景的一个场景中,场景不会缩放以填充整个屏幕.
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屏幕,但我为SKView推出了以下扩展:
public extension SKView { func isIphoneX() -> Bool { let screenHeight = 2436.0 let screenWidth = 1125.0 let iphoneXAspectRatio = screenHeight / screenWidth let aspectRatio = Double(self.frame.width/self.frame.height) return (aspectRatio == iphoneXAspectRatio) ? true : false } }
用法:基本上它根据屏幕的宽高比设置缩放模式.如果是iPhone X宽高比,则将缩放模式设置为“resizeFill”,否则对于经典矩形iPhone和iPad屏幕使用“aspectFill”模式.
import SpriteKit class GameViewController: UIViewController { // MARK: - View lifecycle override func viewDidLoad() { super.viewDidLoad() guard let view = self.view as? SKView else { return } guard let scene = SKScene(fileNamed: "sceneName") else { return } scene.scaleMode = view.isIphoneX() ? .resizeFill : .aspectFill view.presentScene(scene) } }
我发现resizeFill模式是使内容填满整个iPhone X屏幕而不会扭曲或剪掉场景内容的唯一方法.如果游戏中有HUD节点(分数,计数器,按钮等……),您还需要对其进行更改!
override func didMove(to view: SKView) { // Any additional setup... ... if view.isIPhoneX { hud = SKReferenceNode(fileNamed: "yourIPhoneXHUDScene") } else { hud = SKReferenceNode(fileNamed: "yourStandardHUDScene") } cam.addChild(hud) }
在模拟器中测试每个iPhone屏幕尺寸(3.5“,4”,4.7“,5.5”,5.8“).但是我不知道如何处理在Xcode中设置的视网膜iPad尺寸(2048 x 1536)的gamescenes.