如何缩放/定位节点Swift SpriteKit?自定义视图?

时间:2015-11-18 18:37:04

标签: swift sprite-kit scaling

我正在开发一款游戏,但无法找到缩放/定位所有内容的正确方法。我有一个通用的应用程序,当我从一个设备切换到设备时,节点不是每次都在正确的位置。我使用AspectFill是因为它以适合每个设备的方式调整节点大小。问题是定位。我不知道我是否正确地得出结论,我需要弄清楚如何使视图与屏幕大小相同,以便它为每个设备更改,然后正确定位和缩放所有内容,但这就是我一直想弄清楚的。我一直在网上尝试很多不同的东西,看看如何制作自定义视图。我试图制作一个矩形,其约束条件可以填充屏幕,然后将该矩形设置为等于UIView或SKView。我尝试了很多不同的东西,在网上看了很多东西,但它们要么让人困惑,要么我不知道我是否正确地尝试它们或者它们与我的情况无关。这给我带来了很多困惑,我希望有人可以帮助解决这个问题。我认为问题是我需要制作一个与屏幕大小相关的自定义视图。我不知道这是否可能或我应该追求什么。如果有人能为我清除这一点会很棒。

1 个答案:

答案 0 :(得分:1)

为了让我的游戏保持通用,我的所有node尺寸和位置都取决于SKScene尺寸

请尝试使用SKScene大小的比例,而不是使用硬编码。例如: 而不是写这个:

node.position = CGPointMake(100, 100)

写下这样的东西:

node.position = CGPointMake(world.frame.size.width / 32 * 16, world.frame.size.height / 18 * 9)
  

世界 - SKNodeSKScene

的尺寸完全相同

大小相同

let blackSquare = SKSpriteNode(texture: nil, color: UIColor.blackColor(), size: CGSizeMake(world.frame.size.width / 32, world.frame.size.width / 32))

同样GameViewController应该是这样的:

override func viewDidLoad() {
    super.viewDidLoad()

    // Configure the view

    let skView = view as! SKView
    skView.multipleTouchEnabled = false

    // Create and configure the scene

    let scene = GameScene(size: skView.bounds.size)
    scene.scaleMode = .AspectFill
    scene.size = skView.bounds.size

    skView.presentScene(scene);
}

这有用吗?