SpriteKit-如何放大和缩小SKScene?

时间:2015-08-18 17:31:15

标签: swift sprite-kit skscene

如果我在SpriteKit中制作一个拥有大型世界"的游戏,我需要用户可以选择放大和缩小SKScene,如何我会这样做吗?或者,为了简化操作,在didMoveToView函数中,如何向用户的设备屏幕呈现更多的世界(不使用world.runAction(SKAction.scaleTo(0.5))或其他内容)?

2 个答案:

答案 0 :(得分:34)

有专门为此设计的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.scaleTo(0.5, duration: 1)
    cameraNode.runAction(zoomInAction)

cameraNode基本上是场景中的方形节点,我认为默认采用视图的比例?因为没有尺寸初始化器。因此,当您将其缩小时,场景看起来会变得更小。要缩小,你可以采取行动来增加比例。基本上想象一下整个场景中的矩形,而摄像机中的任何内容都会直接显示在iPhone屏幕上。您还可以添加moveTo操作和序列操作,并在操作上设置timingModes,就像它是普通的spriteNode一样。

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

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

答案 1 :(得分:-3)

所以,我能找到的最佳解决方案就是这样的。在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)
}