从SKNode

时间:2018-02-21 23:19:16

标签: ios swift xcode sprite-kit

在SpriteKit开发中,人们应该如何访问SKView?

例如;假设我创建了一个名为 Player 的自定义SKNode类,以便在整个游戏中使用:

class Player: SKNode {

  /*...*/

}

在本课程中,如果我想从 SKShapeNode 生成 SKSpriteNode (为了提高性能),我需要使用SKView.texture()方法。但我无法访问我的 Player 所在的SKView,除非我将视图传递给实例化 Player 的人。

有没有办法获得附加SKNode的当前视图,这样我就不必将引用传递给我的应用程序周围的视图了?这只是框架的异常吗?处理这个问题的首选方法是什么?

我正在使用Swift语言。

更新

Ron Myschuk的答案是正确的,我接受了它,因为它可能对社区最有用。但是,我想要从节点内访问视图的用例是为了使用纹理方法从SKShapeNode创建SKSpriteNode。

以下是我想要访问的方法的说明:

  

渲染节点内容的一部分,并将渲染图像作为SpriteKit纹理返回。

https://developer.apple.com/documentation/spritekit/skview/1519994-texture

此方法在视图之外似乎很有用。例如,初始化/填充尚未添加到显示树的SKNode时。

我对这个特定问题的解决方案只是动态创建一个SKView并将其用于我的需要,允许它被引擎垃圾收集。

let view = SKView()
let texture = view.texture(from: someSkShapeNode)
let sprite = SKSprite(texture: texture)

// we don't need view anymore

希望这有助于某人。

2 个答案:

答案 0 :(得分:2)

如果您已经在场景中添加了一个播放器实例,并且假设您没有在播放器的初始化器中执行此操作,则可以使用.scene属性

ES5

答案 1 :(得分:0)

您可以从SKTextureUIImage构建CGImage,然后您可以根据所需的每个复杂路径/绘图创建图像(例如,请参阅SKTexture from path或{{3 }})。