spritekit如何有选择地扩展节点

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

作为背景我们假设我有一张地图 - 字面意思是在我的SKScene中呈现的路线图。道路由SKShapenodes表示,路径设置为CGPoints数组。我希望用户能够放大/缩小,所以我创建了一个摄像头节点:

var cam: SKCameraNode = SKCameraNode()

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

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

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

不知道如何处理这个?我可以拥有一个场景层次结构,因此一层可以缩放而另一层不会缩放?可以通过将摄像机节点连接到“可扩展”层来实现吗?任何帮助赞赏!

swift macos scenekit skaction skcameranode
1个回答
2
投票

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

在下文中,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树。

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