spritekit如何有选择地扩展节点

时间:2019-03-15 01:29:14

标签: swift macos scenekit skaction skcameranode

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

var cam: SKCameraNode = SKCameraNode()

,并且用户希望通过在触控板上滚动来放大/缩小:

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

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

不确定如何处理吗?我可以对场景进行分层,以便一层缩放,另一层不缩放吗?将摄像机节点附加到“可伸缩”层可以实现吗?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

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

以下,1.1.0-alpha05是通过相机渲染的,不会更改比例。

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 等将它们转移到cameraNode树中。