SpriteKit-如何放大和缩小 SKScene?

SpriteKit- How to zoom-in and zoom-out of an SKScene?

如果我在 SpriteKit 中制作一个具有大 "world" 的游戏,并且我需要用户可以选择放大和缩小 SKScene,我该怎么做对这个?或者,为了让事情更简单,在 didMoveToView 函数中,我怎样才能在用户设备的屏幕上呈现更多的世界(不使用 world.runAction(SKAction.scaleTo(0.5)) 或其他东西)?

所以,我能找到的最佳解决方案是这样的。在 didMoveToView 函数中,创建一个名为 World 的 SKSpriteNode 并将其设置为您想要的世界大小。然后,如果您想要缩小 50%,请写 world.setScale(0.5)。但是,如果您有一个需要始终位于屏幕中央的播放器节点,则需要将以下内容添加到您的 update 函数中。

override func update(currentTime: CFTimeInterval) {
    world.position.x = -player.position.x * (0.5)
    world.position.y = -player.position.y * (0.5)
}

有一个专门为此构建的 SKCameraNode。 SKCameraNode 将视口定义到您的场景中。您创建一个相机节点并将其分配给场景的相机 属性。

let cameraNode = SKCameraNode()
cameraNode.position = CGPoint(x: scene.size.width / 2, scene.size.height / 2)
scene.addChild(cameraNode)
scene.camera = cameraNode

然后您可以创建动作并 运行 在相机上进行这些动作。因此,要放大场景,您可以这样做。

    let zoomInAction = SKAction.scale(to: 0.5, duration: 1)
    cameraNode.run(zoomInAction)

cameraNode 基本上是场景中的方形节点,我认为它默认采用视图的比例?因为没有大小初始值设定项。所以当你把它变小时,场景看起来就像被放大了。要缩小,您需要执行增加比例的操作。基本上想象你的整个场景中有一个矩形,cameraNode 的矩形中的任何内容都直接显示在你的 iPhone 屏幕上。您还可以添加 moveTo 动作和序列动作,并在动作上设置 timingModes,就好像它是您的普通 spriteNode 一样。

这是 WWDC,苹果人展示了我刚才所说的内容。 CameraNode 位在结束前大约 3 分钟。

https://developer.apple.com/videos/play/wwdc2015-604/