在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
希望这有助于某人。
答案 0 :(得分:2)
如果您已经在场景中添加了一个播放器实例,并且假设您没有在播放器的初始化器中执行此操作,则可以使用.scene属性
ES5
答案 1 :(得分:0)
您可以从SKTexture
或UIImage
构建CGImage
,然后您可以根据所需的每个复杂路径/绘图创建图像(例如,请参阅SKTexture from path或{{3 }})。