Wenn ich ein Spiel in SpriteKit mache, das eine große "Welt" hat, und ich brauche den Benutzer, um die Möglichkeit zu haben, in die SKScene
hinein- und hinauszuzoomen, wie würde ich darüber gehen? Oder, um es einfacher zu machen, wie kann ich in der didMoveToView-Funktion mehr von der Welt auf dem Bildschirm des Benutzers anzeigen (ohne world.runAction(SKAction.scaleTo(0.5))
oder etwas anderes zu verwenden)?SpriteKit- Wie man ein SKScene vergrößert und verkleinert?
Antwort
Also, die beste Lösung, die ich finden könnte, geht so etwas. In der didMoveToView
Funktion, erstellen Sie einen SKSpriteNode namens World und machen Sie es zu jeder gewünschten Größe Ihrer Welt. Schreiben Sie dann world.setScale(0.5)
, wenn Sie eine 50% ige Verkleinerung wünschen. Wenn Sie jedoch einen Player-Knoten haben, der immer auf dem Bildschirm zentriert sein muss, müssen Sie Folgendes zu Ihrer update
-Funktion hinzufügen.
override func update(currentTime: CFTimeInterval) {
world.position.x = -player.position.x * (0.5)
world.position.y = -player.position.y * (0.5)
}
Es gibt einen SKCameraNode, der speziell für diesen Zweck entwickelt wurde. Der SKCameraNode definiert das Ansichtsfenster in Ihrer Szene. Sie erstellen einen Kameraknoten und weisen ihn der Kameraeigenschaft Ihrer Szene zu.
let cameraNode = SKCameraNode()
cameraNode.position = CGPoint(x: scene.size.width/2, scene.size.height/2)
scene.addChild(cameraNode)
scene.camera = cameraNode
Sie können dann Aktionen erstellen und diese Aktionen auf der Kamera ausführen. Um die Szene zu vergrößern, würden Sie das tun.
let zoomInAction = SKAction.scaleTo(0.5, duration: 1)
cameraNode.runAction(zoomInAction)
Die cameraNode ist im Grunde ein Quadrat Knoten in der Szene, dass ich denke, die Proportionen der Ansicht standardmäßig nimmt? Weil es keinen Größeninitialisierer gibt. Wenn Sie es also verkleinern, sieht die Szene so aus, als ob sie gezoomt wird. Zum Verkleinern würden Sie eine Aktion ausführen, die den Maßstab vergrößert. Stellen Sie sich grundsätzlich ein Rechteck in Ihrer gesamten Szene vor, und was auch immer im cameraNode-Rechteck ist, wird direkt auf Ihrem iPhone-Bildschirm angezeigt. Sie können auch moveTo-Aktionen und Sequenzaktionen hinzufügen und timeModes für die Aktionen so einstellen, als wäre es Ihr normaler SpriteNode.
Hier ist die WWDC, wo der Apfelmann zeigt, was ich gerade gesagt habe. CameraNode Bit ist ca. 3 Minuten vor dem Ende.
Dies sollte wirklich die akzeptierte Antwort sein –
Was ist los mit der 'scale' Eigenschaft der Welt einstellen? Wenn Sie auf iOS 9 ausgerichtet sind, können Sie einen [SKCameraNode] (https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKCameraNode/) hinzufügen. – 0x141E