spriteKit 的背景超出 phone IOS 的框架

Background of spriteKit exceeds the frame of the phone IOS

我很难理解不同设备上的分辨率是如何工作的。所以我所做的是将背景图像制作成 1024 x 768,然后在 iphone 5 设备上进行测试。当我 运行 它时,屏幕的下半部分被切掉,就像顶部一样。我确实使用 AspectFill 作为我的缩放模式,但即使我在 iphone 6 或 6+ 上测试它,背景仍然被切断。

以下是我的 gameviewcontroller 代码

    import UIKit
    import SpriteKit

    class GameViewController: UIViewController {

      override func viewDidLoad() {
      super.viewDidLoad()

    let scene = GameScene(size: CGSize(width: 1024, height: 768))
    let skView = self.view as! SKView

    skView.multipleTouchEnabled = true

    if GameSettings.Debugging.ALL_TellMeStatus {
      skView.showsFPS = GameSettings.Debugging.ALL_ShowFrameRate
      skView.showsNodeCount = GameSettings.Debugging.ALL_ShowNodeCount
      skView.showsDrawCount = GameSettings.Debugging.IOS_ShowDrawCount
      skView.showsQuadCount = GameSettings.Debugging.IOS_ShowQuadCount
      skView.showsPhysics = GameSettings.Debugging.IOS_ShowPhysics
      skView.showsFields = GameSettings.Debugging.IOS_ShowFields

    }


    skView.ignoresSiblingOrder = true



    scene.scaleMode = .AspectFill

    _ = SGResolution(screenSize: view.bounds.size, canvasSize: scene.size)

    skView.presentScene(scene)

  }

      override func shouldAutorotate() -> Bool {
    return true
      }

      override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .Landscape
      }

      override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Release any cached data, images, etc that aren't in use.
  }

      override func prefersStatusBarHidden() -> Bool {
    return true
      }
    }

以及我添加背景图片的代码。

let background = SKSpriteNode(imageNamed: "Artboard 1")
        background.posByCanvas(0.5, y: 0.5)
        background.xScale = 1.2
        background.yScale = 1.2
        background.size = self.frame.size
        background.zPosition = -1
        addChild(background)

这是启动屏幕尺寸的正确方法还是我应该从 iPad 屏幕尺寸开始然后对其进行除垢?如果有人能指导我如何解决这个问题,那就太好了!!

宽高比填充将切掉部分背景。

您的场景的纵横比为 4:3

您的设备的纵横比为 16:9

AspectFill 将以当前纵横比 (4:3) 缩放您的场景,直到最远的边界被填满,从而使整个视图显示场景并且没有黑色边框;

AspectFit 将缩放直到填满最近的边框,这将为您提供黑条以保持纵横比。

如果你不想保留 4:3,那么你可以使用 .Fill,这当然会让你的精灵在 16:9 上变得更胖,因为它只会拉伸场景直到它击中所有 4 个边界

最后你有 .ResizeFill,它所做的是调整场景边界的大小以匹配你的屏幕大小,所以如果你从 1024x768 场景开始,当你查看它时它会变成 736x414 场景在 iPhone 6+ 上(这是因为我们以点而不是像素为单位工作,像素数将为 x3(因此为 2208x1242),硬件将缩小到 1920x1080)。

您需要退后一步,评估您希望您的游戏在 3 种不同的纵横比下呈现的效果

16:9、3:2 和 4:3,并确定以上 4 种方法中哪一种最适合您。

现在在我看来,我发现纵横比填充效果最好,我只是计划 16:9 纵横比,确保我没有在可能被裁剪的区域放置任何重要信息游戏,但这并不适用于所有人,不幸的是没有人可以在这部分帮助您,因为这是您的游戏,您是决定其外观和感觉的人。