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

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

4
为了让我的游戏具有普适性,我使我们所有的节点大小和位置都依赖于SKScene的大小。不要使用硬编码数字,尝试使用从SKScene大小派生的比例。例如:不要写成这样:
node.position = CGPointMake(100, 100)

请写出类似这样的内容:

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

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

大小相同

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);
}

这篇文章对您有帮助吗?


你是否以1x、2x和3x尺寸导入节点的图片文件? - Stevie Thiel
不,我没有。但是尽量让你的图像尽可能轻,但分辨率要高。 - Darvas
好的,还有,你怎么让你的世界节点与SKView大小相同,你在哪里定义它? - Stevie Thiel
好的,我做了这个应用程序,其目的是让3个节点向上移动屏幕。一个在左边,一个在中间,一个在右边。它适用于iPad,并在模拟器中完美定位。我将self.frame.size.width/3用于左侧节点,并将其除以2用于中间节点。然而,当我在iPhone上使用它时,它的位置太靠左了。我不知道为什么会发生这种情况? - Stevie Thiel
非常确定现在一切都正常了,感谢您的帮助! - Stevie Thiel
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接