【问题标题】:Problems with screen size on iPhoneX using SpriteKit使用 SpriteKit 在 iPhone 上的屏幕尺寸问题
【发布时间】:2020-01-01 20:24:29
【问题描述】:

在学习 Sprite Kit 教程时,我注意到使用 UIScreen.main.bounds 来获取它在除 iPhoneX 和 11 之外的大多数 iPhone 尺寸上工作的屏幕范围。我编写了一个快速测试,如下所示,我移动了锚点指向 CGPoint(x: 0, y: 0) 然后从左边缘放置 3 个标签 20、40 和 60 点。除了数字向左移动的 iPhoneX 外,这可以正常工作。我做错了什么?

类 GameScene:SKScene、SKPhysicsContactDelegate {

let screenSize = UIScreen.main.bounds


var testLabel1: SKLabelNode!
var testLabel2: SKLabelNode!
var testLabel3: SKLabelNode!



override func didMove(to view: SKView) {

    print (screenSize)


    anchorPoint = CGPoint(x: 0, y: 0)
    testLabel1 = SKLabelNode(text: "1")
    testLabel1.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    testLabel1 = initialiseLabel(label: testLabel1, position: CGPoint(x: 20, y: 50))
    testLabel2 = SKLabelNode(text: "2")
    testLabel2.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    testLabel2 = initialiseLabel(label: testLabel2, position: CGPoint(x: 40, y: 50))
    testLabel3 = SKLabelNode(text: "3")
    testLabel3.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    testLabel3 = initialiseLabel(label: testLabel3, position: CGPoint(x: 60, y: 50))
    self.addChild(testLabel1)
    self.addChild(testLabel2)
    self.addChild(testLabel3)

}

func initialiseLabel(label: SKLabelNode, position: CGPoint) -> SKLabelNode{
    label.position = position
    label.fontSize = 36
    label.fontName = "AmericanTypewriter-Bold"
    label.fontColor = UIColor.white
    return label
}

【问题讨论】:

  • 您能否发布一些关于您在较新 iPhone 屏幕上遇到的问题的图片或一些日志输出?
  • 你的场景大小和屏幕大小是两个不同的东西。在精灵套件中,您无需担心屏幕大小。您担心要使用什么尺寸,它在各种纵横比上的外观,以及它如何缩放以满足各种设备的尺寸

标签: swift iphone sprite-kit


【解决方案1】:

这里发生的情况是您使用的是默认场景大小,即 768x1366。

然后在保留纵横比的同时进行缩放以填满手机的整个屏幕。

768x1366 是 9:16 的比例。

X 和设备上不再符合 9:16。事实上,它们现在更薄(更宽取决于您的方向)

这意味着您将在纵向模式下丢失左侧和右侧的信息,因为您正在绘制一个更胖的框,并且无法在屏幕上绘制额外的内容。

要解决此问题,您需要确定如何处理所有宽高比。

它们是 3:4、9:16、6:13、512x683、139x199 和 207x448(哦,苹果真的不再关心了)

基本上,您应该开始考虑任何纵横比。

我个人建议你使用方形场景来设计你的游戏环境,这样你就可以覆盖所有的基地。

然后,您可以将 UIKit 用于需要安装到屏幕上某些位置的任何静态信息,并且所有这些信息最终都不会让您的 sprite kit 引擎陷入困境。

【讨论】:

  • 您能否进一步解释一下您所说的“我个人建议您使用方形场景来设计游戏环境”是什么意思?也就是说,如果你有一个单屏游戏,你如何在所有尺寸上呈现相同的纵横比?有没有一种简单的方法可以在“更宽”的手机上使用信箱?还是“盒子”方法只是说您必须滚动才能看到所有内容,无论比例如何? 编辑: This 可能是答案?
  • 您使用该框可以更轻松地处理向您抛出的任何纵横比。您不会向所有设备发送相同的纵横比,而是允许人们看到不同数量的内容。宽高比越宽,侧面的内容越多,而高宽比的顶部和底部内容越多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多