如何精确测量尺寸和尺寸Swift节点的位置取决于iDevice

时间:2016-07-27 20:44:35

标签: ios iphone swift sprite-kit resolution

我正在创建我的第一个Swift + SpriteKit游戏,我正在处理这个根据iDevice重新调整所有内容的麻烦。

我有一个基于设备运行的类,返回它的名称。 有了这个名字,我创建了一个基于设备字符串名称的字典,返回给定设备的分辨率。

然后我创建了2个函数 - > getSizeBasedOnDevice()和getPositionBasedOnDevice()

因为我为iPhone 6S编写了游戏代码。我认为这样做就像进行简单的数学计算一样容易获得所有这些尺寸和位置,但看起来并非如此。

这些是我的功能:

func getSizeBasedOnDevice(width: CGFloat, height: CGFloat) -> CGSize {
    // iPhone 6s w: 375, h: 667

    let deviceName = UIDevice.currentDevice().modelName
    let iphoneNative = ScreenSize(width: 375, height: 667)
    let resolution = Resolutions[deviceName]

    let newWidth = (CGFloat(resolution!.getWidth()) * width ) / iphoneNative.getWidth()
    let newHeight = (CGFloat(resolution!.getHeight()) * height) / iphoneNative.getHeight()

    return CGSize(width: newWidth, height: newHeight)
}

func getPositionBasedOnDevice(x: CGFloat, y: CGFloat) -> CGPoint {

    let deviceName = UIDevice.currentDevice().modelName
    let iphoneNative = ScreenSize(width: 375, height: 667)
    let resolution = Resolutions[deviceName]

    let newX = (CGFloat(resolution!.getWidth()) * x) / iphoneNative.getWidth()
    let newY = (CGFloat(resolution!.getHeight()) * y) / iphoneNative.getHeight()

    return CGPoint(x: newX, y: newY)
}

我的iPhoneNative高度和宽度将是我的iPhone 6S'。 所以计算对我来说有点简单,但事实并非如此。

所以有这些示例值:

Asset's width = 100 pts
Current Device (iPhone 4S) width = 320 pts
Originally designed Device (iPhone 6S) width = 375 pts

数学将是:

  

(320 * 100)/ 375 = 85.33

因此iPhone 6S上宽度为100点的资产在iPhone 4S上的宽度为85.33。

首先我认为这似乎很好,但看看结果,我发现我做错了。

任何人都可以给我一个提示吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

让我阻止你:)

我理解你的困难,这不是为不同屏幕尺寸构建游戏的正确方法。

你应该只考虑Scene来构建你的游戏。

然后打开GameViewController.swift并查找此行

scene.scaleMode = .AspectFill

此行允许您定义场景应如何在屏幕中显示(对于处理不同的屏幕尺寸,这一点尤其重要)。

您有4个选项

  
      
  • .Fill:缩放SKScene以填充整个SKView
  •   
  • .AspectFill:缩放SKScene以填充SKView,同时保留场景的宽高比。如果是,可能会发生一些种植   视图具有不同的宽高比。
  •   
  • .AspectFit:缩放SKScene以适应SKView,同时保留场景的宽高比。如果,可能会出现一些信箱   视图具有不同的宽高比。
  •   
  • .ResizeFill:修改SKScene的实际尺寸,使其与SKView完全匹配。
  •