ios SKCameraNode上的setScale()是否可以排除某些子节点?

k7fdbhmy  于 2023-02-26  发布在  iOS
关注(0)|答案(1)|浏览(143)

我有一个SKCameraNode,它是作为一个孩子添加到我的SKScene中的。我有一个捏手势识别器,它使用手势识别器的scale属性结合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的一些孩子,而不是所有的孩子。有什么方法可以指定我想缩放的孩子吗?

drkbr07n

drkbr07n1#

可以将不想缩放的节点作为子节点添加到摄影机。
请参阅Getting Started with a Camera文档:
摄影机的子节点始终相对于摄影机节点的原点进行渲染,而不会对其应用摄影机的缩放或旋转。例如,如果您的应用显示分数或其他数据浮动在游戏玩法上方,则渲染这些元素的节点应作为子节点添加到摄影机。

相关问题