我所有的图像和 sknodes 在不同的 iPhone 上都处于错误的位置

All of my image and sknodes are in the wrong position with different iphones

所以我今天非常高兴终于完成了我的第一个应用程序,我已经为应用程序商店做好了一切准备,并且非常接近提交它以供审核。我没有意识到的是我的应用程序在 iPhone 5 Xcode 模拟器中看起来和运行完美.. 但是当我将它切换到 iPhone 6 和 6 Plus.. 一切都关闭了平衡,看起来像一个二年级学生试图制作一个应用程序。关于调整我的应用程序以使其更通用的任何提示?喜欢适合所有 iPhone 屏幕。

仅供参考:我在 Xcode 中使用 Swift 并且一切都是程序化的,而不是在故事板上。

谢谢,任何帮助将不胜感激。

这就是我定位 SKNodes 的方式..

    sunIcon = SKSpriteNode(imageNamed: "Sun-icon")
    sunIcon.position = CGPoint(x: CGRectGetMidX(frame) - 5, y: CGRectGetMaxY(frame) - 220)
    sunIcon.zPosition = 49
    addChild(sunIcon)

使它对多个 phone 大小通用的部分问题可能是无论 phone 你 运行 它是什么,你的场景大小都是相同的。大小取自 GameScene.sks 文件,当您 运行 在不同的 phone 上时不会更改。这意味着 (0, 0) 可能不是屏幕的左下角。这会使它很难编程为通用的。如果您希望 scene.size 根据 phone 而不同,只需更改场景的大小,然后在 GameViewController 或您可能切换到新场景的其他任何地方切换到它。这可以通过在转移到新场景之前创建新场景时执行类似的操作来完成:

let screenSize: CGRect = UIScreen.mainScreen().bounds
scene.size = CGSizeMake(screenSize.width, screenSize.height)

这不会神奇地使该应用程序通用,但在对其进行编程以适应所有尺寸时它会非常有帮助。还要记住不同类型的 scaleModes,比如我在更改场景大小时使用的 AspectFill。

一般来说,最好避免对恶意位置进行硬编码。例如说

node.position = CGPoint (103.3,142.0)

不太可能在不同的屏幕尺寸上很好地缩放。它可能是 iPhone 5 上的合适位置,因为它位于屏幕宽度的三分之一和屏幕高度的四分之一处,但在 iPhone 6 上它可能看起来不合适,因为它接近屏幕宽度的四分之一和屏幕高度的五分之一。最好这样说:

node.position = CGPoint(self.frame.size.width/3,self.frame.size.height/4)

因此节点将处于相对于视图尺寸的相同位置。

如果您已经对位置进行了硬编码,并且布局看起来适合 iPhone 5,您可以使用如下函数:

func relativePointWithPoint(point:CGPoint)->(CGPoint)
{
    return CGPoint(x: point.x/320.0*self.frame.size.width, y: point.y/568.0*self.frame.size.height)
}

将点转换成它的相对位置。例如:

node.position = self.relativePointWithPoint(point:CGPoint (103.3,142.0))