【问题标题】:spritekit how to selectively scale nodesspritekit 如何选择性地缩放节点
【发布时间】:2019-08-06 01:05:37
【问题描述】:

作为背景,假设我有一张地图——实际上是一张在我的 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】:

    情况就是这样。如果您希望节点比例不会随相机而变化,只需将节点添加到相机树中即可。不要忘记将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树。

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多