【发布时间】:2018-08-01 16:44:48
【问题描述】:
在 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
希望这对某人有所帮助。
【问题讨论】:
-
"如何通过视图控制器访问 SKView"
-
我知道在 SK 中构建纹理的这个问题/痛苦。以下是我的一些发现,不必要地冗长:stackoverflow.com/questions/40084701/…, stackoverflow.com/questions/40130888/…
标签: ios swift xcode sprite-kit