这是为我的游戏设置布局的代码问题是,当我的游戏在较小版本的手机上播放时,布局会改变我如何保持相同的尺寸 代码:
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上改变尺寸。
答案 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)
的精灵),该按钮将始终出现在任何设备中任何场景的左上角。
在场景中拥有节点层次结构通常更好
这将允许您放大/缩小世界节点(包含游戏性元素),同时保持HUD节点中的UI元素(按钮)固定大小。
要放大/缩小,您可以直接修改worldNode比例,例如scene.worldNode.setScale(scaleAmount)
。 (假设您没有使用SKCameraNode)
此方案允许您不必为每个设备定位/调整单个精灵的大小;而是在根级别进行更改 - 在本例中为worldNode,并且还允许您具有基于设备或多或少适当缩放的UI元素,并且保持固定,与您的worldNode规模无关。