如何在我的精灵套件游戏Swift中获得所有iPhone的相同布局尺寸

时间:2015-09-23 00:16:29

标签: xcode swift

这是为我的游戏设置布局的代码问题是,当我的游戏在较小版本的手机上播放时,布局会改变我如何保持相同的尺寸 代码:

 override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
        let sKView = self.view! as! SKView
        sKView.ignoresSiblingOrder = true
        scene.size = sKView.bounds.size
        let reveal = SKTransition.fadeWithDuration(0.45)
        sKView.presentScene(scene, transition: reveal)



  }

}

上面的代码不能很好地工作,但仅适用于iPhone 6 plus,这是iPhone我正在测试我的应用程序,但它不会在较小的iPhone上改变尺寸。

2 个答案:

答案 0 :(得分:1)

我所知道的唯一方法是根据屏幕大小手动调整大小和移动节点,例如:

if size.width == 320 && size.height == 568 {
//iPhone 5/5S screen dimensions
spriteNode!.size = CGSize(height: 30, width: 45)
spriteNode!.position = CGPoint(x: 100, y: 50)
} else if size.width == 768 && size.height == 1024 {
//iPad screen dimensions
spriteNode!.size = CGSize(height: 60, width: 90) /* Twice the normal size */
spriteNode!.position = CGPoint(x: 200, y: 80) /* Moved over and above a bit */
}

颈部疼痛,但AFAIK是调整节点大小以适应不同屏幕大小的最简单方法。

答案 1 :(得分:0)

我通常会这样做的方式如下:在创建场景时,我会根据设备将大小设置为特定的默认值;例如:仅用于横向模式(尺寸仅为例):

    let size =
    UIDevice.currentDevice().userInterfaceIdiom == .Pad ?
        CGSizeMake(3200, 2400) : // all ipads, 4:3 ratio
        UIScreen.mainScreen().bounds.landscapeSize().width < 568 ?
            CGSizeMake(2400, 1600) : // iphone 4s rows; 3:2 ratio
            CGSizeMake(2850, 1600) // other iphones 16:9 ratio

这允许我在任何设备上具有已知的场景大小。

要布局UI元素,我使用场景大小并使用偏移,因此左上角的按钮将具有坐标(0, scene.height)(对于锚定到(0,1)的精灵),该按钮将始终出现在任何设备中任何场景的左上角。

在场景中拥有节点层次结构通常更好

  • 场景
    • BackgroundNode:SKNode,zPosition = 0
    • WorldNode:SKNode,zPosition = 10
    • HudNode:SKNode,zPosition = 20

这将允许您放大/缩小世界节点(包含游戏性元素),同时保持HUD节点中的UI元素(按钮)固定大小。

要放大/缩小,您可以直接修改worldNode比例,例如scene.worldNode.setScale(scaleAmount)。 (假设您没有使用SKCameraNode)

此方案允许您不必为每个设备定位/调整单个精灵的大小;而是在根级别进行更改 - 在本例中为worldNode,并且还允许您具有基于设备或多或少适当缩放的UI元素,并且保持固定,与您的worldNode规模无关。