【问题标题】:SpriteKit - How do I handle multiple screen sizes?SpriteKit - 如何处理多种屏幕尺寸?
【发布时间】:2016-02-08 04:19:09
【问题描述】:

我的新游戏已经完成,现在我只是在多个真实设备上进行测试。测试后我遇到了多个问题。最大的问题是如何处理屏幕尺寸。游戏是我希望它在 6 Plus/6s Plus 上的样子,而不是在 6s、6、5s、5、4s、4 或 iPad 上的样子。

我找到了这两个答案,但我不知道如何实现它们:How to support multiple screen sizes in SpriteKit?SpriteKit how to get correct screen size

我真的很想得到任何帮助,因为这让我很恼火。

【问题讨论】:

  • 只是检查屏幕大小,然后手动调整每个节点的大小不起作用还是..?
  • 虽然你达到了这篇文章的字数限制,但问题仍然很长。你能总结一下大部分代码吗?这里的大部分内容都不需要传达问题。
  • @dannybess 不管出于什么原因,我不知道为什么我没有想到这一点。我在这里找到了答案:stackoverflow.com/a/33953003/3926691
  • @KennethBruno 虽然由于 dannybess 提醒我检查屏幕尺寸,我最终找到了答案,但我还是会为可能遇到我的问题的其他人总结问题以寻求答案。
  • @behindtheaura 很高兴听到这个消息!

标签: ios swift sprite-kit


【解决方案1】:

我被提醒检查屏幕大小和更改节点大小,我发现这是一个答案:how to check screen size of iphone 4 and iphone 5 programmatically in swift

我只需要在我的 GameScene 中添加这个,并且在每个 .swift 中都会调用它:

extension UIScreen {

enum SizeType: CGFloat {
    case Unknown = 0.0
    case iPhone4 = 960.0
    case iPhone5 = 1136.0
    case iPhone6 = 1334.0
    case iPhone6Plus = 1920.0
}

var sizeType: SizeType {
    let height = nativeBounds.height
    guard let sizeType = SizeType(rawValue: height) else { return .Unknown }
    return sizeType
}
}

还有这个

if UIScreen.mainScreen().sizeType == .iPhone4 {
// Make specific layout for small devices.
}

【讨论】:

  • @DavinTryon 我在编辑我的答案后取消了删除帖子。我澄清了我为解决答案所做的工作并删除了“感谢...”部分。另外,如果你不介意,我可以问你一个不同的问题吗?
【解决方案2】:

就我而言,我有一个肖像游戏,我想保持height 不变,同时根据设备的屏幕向左/向右显示更多或更少的内容。

为此,我在 Xcode 的场景编辑器中添加并为我的场景设置了一个 SKCameraNode,并将场景大小设置为“最宽”纵横比设备 (iPhone X),即 2436x1125 像素。

然后为场景设置一个自定义类并覆盖sceneDidLoad

override func sceneDidLoad()
{
    super.sceneDidLoad()

    self.size.width = self.size.height * (UIScreen.main.bounds.size.width / UIScreen.main.bounds.size.height)
    self.scaleMode = .aspectFit
}

如果我想预览我的游戏在“最窄”设备中的外观(任何 iPad 都有 1.5:1 的比例),我只是暂时将场景的 width 更改为 1500 像素左右。

注意:SKViewcontentMode 没有任何改变。

【讨论】:

    【解决方案3】:

    这是一个很常见的问题。

    我们通常在 SpriteKt 中做的是给 SKScene 一个固定的大小,让 SpriteKit 在不同的设备上为你做缩放。

    所以基本上我们有两种方法可以正确地做到这一点

    1) 将场景大小设置为 iPad(例如 1024x768 - 横向、768x1024 - 纵向)。这是 Xcode 7 中的默认设置。

    您通常只是在 iPad 上的顶部/底部(横向)或左侧/右侧(纵向)有/显示一些额外的背景,而这些背景会在 iPhone 上被裁剪。

    在 iPad 上显示更多/在 iPhone 上裁剪的游戏示例:

    Altos Adventure、Leos Fortune、Limbo、The Line Zen、Modern Combat 5。

    2) Apple 将 xCode 8 中的默认场景大小更改为 iPhone 6/7(750*1334-Portait、1337*750-Landscape)。此设置将裁剪您在 iPad 上的游戏。

    在 iPad 上显示较少的游戏示例:

    Lumino City,机器人独角兽攻击

    这两个选项之间的选择取决于您,并且取决于您制作的游戏。我通常更喜欢使用选项 1 并在 iPad 上显示更多背景。

    对于缩放模式,通常最好使用.aspectFill.aspectFit

    您将使用通用资源槽和/或设备特定图像。这样您就可以在所有设备上获得一致的体验

    Spritekit scale full game to iPad

    How to make SKScene have fixed width?

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多