swift - spritekit如何有选择地缩放节点

标签 swift macos scenekit skaction skcameranode

作为背景让我们假设我有一张 map ——实际上是一张在我的 SKScene 中渲染的路线图。道路由 SKShapenodes 表示,路径设置为 CGPoints 数组。我希望用户能够放大/缩小,所以我创建了一个相机节点:

var cam: SKCameraNode = SKCameraNode()

当用户想通过在触控板上滚动来放大/缩小时:

let zoomInAction = SKAction.scale(to: CGFloat(scale), duration: 0.0)
camera?.run(zoomInAction)

这很好用,但是我有一个额外的复杂性,我不确定如何处理。我希望一些节点(例如道路名称标签、图标、 map 图例)免于缩放 - 这样当用户放大/缩小时,道路名称标签保持相同大小,而道路形状按比例缩放。

不确定如何处理?我可以有一个场景层次结构,以便一层缩放而另一层不缩放吗?可以通过将相机节点附加到“可扩展”层来实现吗?任何帮助表示赞赏!

最佳答案

情况是这样的。如果您希望节点比例不会随相机改变,只需将节点添加到相机树中即可。不要忘记将 cameraNode 添加到场景中,否则将不会渲染那些连接到 camera 的节点。

在下面,label 是通过相机渲染的,不会改变比例。

            let  label =   SKLabelNode.init(text: "GFFFGGG")
            label.fontSize = 30
            label.fontColor = UIColor.black
            label.name = "cool"
            label.zPosition = 100

            let camera = SKCameraNode()
            camera.addChild(label)

            scene.addChild(camera)
            scene.camera = camera

         camera.position = CGPoint.init(x: 0, y: 0)
            camera.xScale = 2.0

如果之前有节点连接到场景, 您可以从父节点中删除节点,然后添加到相机。
如果使用函数来批量处理它们应该没有想象的那么难。

也许没有必要:

你可以通过camera.convert(point: , from:)等将它们转移到cameraNode树

关于swift - spritekit如何有选择地缩放节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55174339/

相关文章:

objective-c - NSTextView - 绘制无法编辑的自定义字形

python - 使用 Appkit 和 Python 在 OSX 上隐藏鼠标光标

ios - SceneKit AVPlayer 仅播放音频

objective-c - 简单的 OS X TCP 转发服务器/服务

swift - 我可以让眼睛包含在 ARSCNFaceGeometry 中(从 VNFaceLandmarkRegion2D 获取 3D 瞳孔坐标)吗?

swift - SKAction 不适用于 overlaySKScene?

Swift:打印除​​法的小数精度

swift 2 如何删除 View Controller 中 TableView 中的空行

ios - MKStoreKit 恢复购买总是成功

ios - 自动将用户添加到 Swift 中的 Parse 类