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

Ste*_*iel 5 scaling sprite-kit swift

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

Dar*_*das 4

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

不要使用硬编码的数字,而是尝试使用您的SKScene尺寸的比例。例如:而不是这样写:

node.position = CGPointMake(100, 100)
Run Code Online (Sandbox Code Playgroud)

写这样的东西:

node.position = CGPointMake(world.frame.size.width / 32 * 16, world.frame.size.height / 18 * 9)
Run Code Online (Sandbox Code Playgroud)

世界 -SKNode与你的大小完全相同SKScene

尺寸相同

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

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);
}
Run Code Online (Sandbox Code Playgroud)

这有帮助吗?