spriteKit的背景超出了手机IOS

时间:2016-02-18 05:57:22

标签: swift sprite-kit resolution screen-size

我很难理解不同设备上的分辨率如何工作。所以我所做的是制作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屏幕尺寸开始然后除垢?如果有人能引导我如何攻击这个问题那就太棒了!!

1 个答案:

答案 0 :(得分:0)

Aspect填充会切断你背景的部分内容。

您的场景的宽高比为4:3

您的设备的宽高比为16:9

AspectFill将以当前宽高比(4:3)缩放场景,直到填充最远的边框,允许整个视图显示场景并且没有黑色边框;

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

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

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

您需要退后一步,评估您希望游戏在3种不同宽高比上的显示效果

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

现在在我看来,我发现Aspect Fill效果最好,我只是计划16:9的宽高比,确保我没有在可能为游戏裁剪的区域中放置任何重要信息,但是这个对每个人都不起作用,不幸的是没有人可以帮助你完成这个部分,因为这是你的游戏,你决定了它的外观和感觉。