2017-02-19 52 views
3

所以我正在使用Spritekit开发一款Xcode游戏,用于iPhone。而且,通过使用node.setScale()方法,它在所有iPhone设备上看起来都很相似。现在我想使它成为Universal,并在iPad上运行。我如何轻松做到这一点?有规模的公式吗?Spritekit比例尺全面游戏到iPad

我已经尝试过是这样的:

if UIDevice.current.userInterfaceIdiom == .pad { 
     sscale = frame.size.height/768 
    }else{ 
     sscale = frame.size.height/320 
    } 

然后为每个节点我做node.setScale(sscale)。

这最终不是在iPad迷你,因为工作看起来不同于iPad的空气......即节点的大小和位置...

任何帮助吗?

+0

如果你愿意扩展节点(并不太担心宽高比),你有没有尝试设置'scene.scaleMode = .fill'这将缩减为你的一切? – ziya

回答

1

如果您使用的是SKCameraNode,则可以通过缩放相机来缩放整个场景。

// SKCameraNode+Extensions.swift 
extension SKCameraNode { 
    func updateScaleFor(userInterfaceIdiom: UIUserInterfaceIdiom) { 
     switch userInterfaceIdiom { 
      case .phone: 
       self.setScale(0.75) 
      case .pad: 
       self.setScale(1.0) 
      default: 
       break 
     } 
    } 
} 

然后在场景初始化时调用它。

guard let camera = self.childNode(withName: "gameCamera") as? SKCameraNode else { 
    fatalError("Camera node not loaded") 
} 

// Update camera scale for device/orientation 
let userInterfaceIdiom = UIDevice.current.userInterfaceIdiom 
camera.updateScaleFor(userInterfaceIdiom: userInterfaceIdiom) 
4

你基本上有2个选项。

1)将场景大小设置为1024X768(横向)或768x1024(纵向),并将默认的.aspectfill用于缩放模式。这是Xcode 7(iPad分辨率)的默认设置。

你通常只是在iPad上的顶部/底部(横向)或左/右(纵向)显示一些额外的背景。

,显示更多的在iPad上的游戏例子:

Altos的冒险,狮子座的财富,凌波,行禅,现代战争5

2)苹果更改了默认的场景大小在Xcode 8到iPhone 6/7(750 * 1334-Portait,1337 * 750-风景)。此设置会在iPad上裁剪您的游戏。

2个选项之间的选择取决于您,取决于您正在制作的游戏。我通常更喜欢使用选项1并在iPad上显示更多背景。

无论场景大小缩放模式通常最好在.aspectFill的保留默认设置或.aspectFit

要调整具体的事情,如标签等,为你能做到这样的设备

if UIDevice.current.userInterfaceIdiom == .pad { 
    // adjust some UI for iPads 
} 

我不会尝试做一些随机黑客手动更改不同设备上的场景或节点大小/尺度,你应该让xCode/SpriteKit为你做。

希望这有助于