swift - 使用 SpriteKit 在 iPhone 上出现屏幕尺寸问题

标签 swift iphone sprite-kit

在学习 Sprite Kit 教程时,我注意到使用 UIScreen.main.bounds 来获取屏幕范围,该范围适用于除 iPhoneX 和 11 之外的大多数 iPhone 尺寸。我编写了一个快速测试,如下所示,我在其中移动 anchor 指向 CGPoint(x: 0, y: 0),然后在距左边缘 20、40 和 60 点的位置放置 3 个标签。除了在 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
}

最佳答案

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

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

768x1366 的比例为 9:16。

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

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

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

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

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

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

然后,您可以使用 UIKit 来获取需要安装到屏幕上特定位置的任何静态信息,并且所有这些信息最终不会使您的 Sprite 套件引擎陷入困境。

关于swift - 使用 SpriteKit 在 iPhone 上出现屏幕尺寸问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59555848/

相关文章:

iphone - 取消编辑: NSUndoManager or separate NSManagedObjectContext for editing?

ios - 处理多个 SKScenes 的最佳方法是什么?

ios - Sprite 不跟踪计数

swift - CoreData 谓词使用关系

swift - 有异常的动态 UITableViewCell 高度

swift - 这种动画风格的完成处理程序或函数

ios - iPhone慢动作视频转码

ios - 如何将圆形蒙版应用到 UIImageView

iphone - Facebook SSO 显示错误的语言

ios - 如何将 UIview 添加到 SpriteKit 项目?