如何根据iDevice准确测量Swift节点的大小和位置

msqar

我正在创建我的第一个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。

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

谁能给我一个提示吗?

提前致谢。

卢卡·安格莱蒂(Luca Angeletti)

让我阻止你:)

我了解您的困难,这不是针对不同屏幕尺寸构建游戏的正确方法。

您只应该考虑Scene

然后打开GameViewController.swift并寻找这条线

scene.scaleMode = .AspectFill

该行确实允许您定义场景在屏幕上的表示方式(这对于处理不同的屏幕尺寸尤为重要)。

您有4个选择

  • .Fill:缩放SKScene以填充整个SKView
  • .AspectFill:缩放,SKSceneSKView在保留场景的高宽比同时填充如果视图具有不同的宽高比,则可能会发生某些裁剪。
  • .AspectFit:缩放SKScene以适合,SKView同时保留场景的宽高比。如果视图具有不同的宽高比,则可能会发生一些黑框现象。
  • .ResizeFill:修改SKScene的实际大小以完全匹配SKView

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据JTree中的图标大小调整垂直线和子节点的位置?

来自分类Dev

Swift 如何更改 backIndicatorImage 的位置和大小

来自分类Dev

如何标记和测量斑点的大小?

来自分类Dev

如何根据子节点自动调整父节点的大小

来自分类Dev

如何从SQL Server测量准确的时间偏移?

来自分类Dev

如何从SQL Server测量准确的时间偏移?

来自分类Dev

如何根据帧大小定位div位置?

来自分类Dev

如何根据图像的大小更改标签的位置

来自分类Dev

如何根据调整大小来填充页面和调整文本位置

来自分类Dev

如何在Java中创建一些内容以根据宽高比调整图像的大小和位置?

来自分类Dev

NetworkX 绘图:节点位置和大小之间的单位/比例不同?

来自分类Dev

如何测量字体大小?

来自分类Dev

如何测量管道数据的大小?

来自分类Dev

如何从XML文件中准确获取子节点和该节点中的数据

来自分类Dev

在Swift中准确测量时间以在各种设备之间进行比较

来自分类Dev

如何迫使Godot重新计算控制节点的大小/位置?

来自分类Dev

如何设置MDI客户的大小和位置?

来自分类Dev

如何设置卡片布局的位置和大小?

来自分类Dev

如何定义它的大小和JPanel的位置

来自分类Dev

如何设置JScrollPane的大小和位置?

来自分类Dev

如何设置 JTextField 的大小和位置?

来自分类Dev

如何根据特定位置和大小在QNX上显示Qt(窗口小部件)应用程序?

来自分类Dev

如何根据设备大小和比例调整UIImage的大小?

来自分类Dev

Swift XMLParser // 根据元素和属性选择节点

来自分类Dev

如何测量Doc2vec模型的准确性?

来自分类Dev

如何使用高阶相关准确地校准测量?

来自分类Dev

如何根据窗口大小更改div在html中的位置

来自分类Dev

如何根据容器的大小转换元素的位置

来自分类Dev

如何根据屏幕大小抖动设置小部件位置

Related 相关文章

  1. 1

    如何根据JTree中的图标大小调整垂直线和子节点的位置?

  2. 2

    Swift 如何更改 backIndicatorImage 的位置和大小

  3. 3

    如何标记和测量斑点的大小?

  4. 4

    如何根据子节点自动调整父节点的大小

  5. 5

    如何从SQL Server测量准确的时间偏移?

  6. 6

    如何从SQL Server测量准确的时间偏移?

  7. 7

    如何根据帧大小定位div位置?

  8. 8

    如何根据图像的大小更改标签的位置

  9. 9

    如何根据调整大小来填充页面和调整文本位置

  10. 10

    如何在Java中创建一些内容以根据宽高比调整图像的大小和位置?

  11. 11

    NetworkX 绘图:节点位置和大小之间的单位/比例不同?

  12. 12

    如何测量字体大小?

  13. 13

    如何测量管道数据的大小?

  14. 14

    如何从XML文件中准确获取子节点和该节点中的数据

  15. 15

    在Swift中准确测量时间以在各种设备之间进行比较

  16. 16

    如何迫使Godot重新计算控制节点的大小/位置?

  17. 17

    如何设置MDI客户的大小和位置?

  18. 18

    如何设置卡片布局的位置和大小?

  19. 19

    如何定义它的大小和JPanel的位置

  20. 20

    如何设置JScrollPane的大小和位置?

  21. 21

    如何设置 JTextField 的大小和位置?

  22. 22

    如何根据特定位置和大小在QNX上显示Qt(窗口小部件)应用程序?

  23. 23

    如何根据设备大小和比例调整UIImage的大小?

  24. 24

    Swift XMLParser // 根据元素和属性选择节点

  25. 25

    如何测量Doc2vec模型的准确性?

  26. 26

    如何使用高阶相关准确地校准测量?

  27. 27

    如何根据窗口大小更改div在html中的位置

  28. 28

    如何根据容器的大小转换元素的位置

  29. 29

    如何根据屏幕大小抖动设置小部件位置

热门标签

归档