SKCameraNode 上的 setScale() 可以排除某些孩子吗?

问题描述 投票:0回答:1

我有一个 SKCameraNode 作为孩子添加到我的 SKScene 中。我有一个捏合手势识别器,它使用手势识别器的缩放属性结合 SKCameraNode 的 setScale 方法来缩放场景。

class GameScene: SKScene 
...
override func didMove(to view: SKView) {
   let cameraNode = SKCameraNode()
   cameraNode.position = self.midPoint
   self.addChild(cameraNode)
   self.camera = cameraNode
        
   let pinchGesture = UIPinchGestureRecognizer()
   pinchGesture.addTarget(self, action: #selector(scale(_:)))
   view.addGestureRecognizer(pinchGesture)

...

@objc func scale(_ sender: UIPinchGestureRecognizer) {
    guard let camera = self.camera, (sender.state == .began || sender.state == .changed) else {
        print("GameScene - Pinch Gesture Action - No camera for scene")
        return
    }
    
    let scale = 1 / sender.scale
    let newScale = max(0.5, min(1.0, previousCameraScale * scale))
    previousCameraScale = newScale
    camera.setScale(newScale)
}

我的问题 - 我只想缩放 GameScene 的一些子项,而不是全部。有没有一种方法可以指定我想要缩放哪些?

ios swift sprite-kit skspritenode skcameranode
1个回答
0
投票

您可以将不想缩放的节点作为子节点添加到相机中。

请参阅相机入门文档:

相机的后代总是相对于相机节点的原点进行渲染,并且不对它们应用相机的缩放或旋转。例如,如果您的应用程序显示分数或其他漂浮在游戏上方的数据,则渲染这些元素的节点应作为子节点添加到相机。

© www.soinside.com 2019 - 2024. All rights reserved.