Swift3中如何将SKSpriteNode合并到SKTexture中形成新的SKSpriteNode?
How to merge SKSpriteNode into a SKTexture to form new SKSpriteNode in Swift 3?
我正在开发 ios 应用程序。我在屏幕上有一个 SKSpriteNode,我从用户那里得到一张我存储为 SKTexture 的绘图。我想将这两者结合起来,并将它们作为一个新的 SKSpriteNode 引入。
问题:我找不到关于如何将 SKSpriteNode 合并到 SKTexture 中的文档。我确定有办法做到这一点。有人会有这方面的示例代码吗?
不确定 "merge" 是什么意思。如果您想使用现有的 SKTexture 创建一个新的 SKSpriteNode 那么这可能是您正在寻找的代码:
let newSprite = SKSpriteNode(texture: yourSKTexture)
您可以使用一个容器来容纳两个精灵,并使用 SKView 的 texture(from:) 方法从中创建一个纹理,如下所示:
override func didMove(to view: SKView) {
backgroundColor = .black
let container = SKNode()
let left = SKSpriteNode(color: .purple, size: CGSize(width: 100, height: 100))
let right = SKSpriteNode(color: .yellow, size: CGSize(width: 100, height: 100))
container.addChild(left)
container.addChild(right)
left.position.x = 50
right.position.x = -50
addChild(container)
if let texture = view.texture(from: container) {
let sprite = SKSpriteNode(texture:texture)
addChild(sprite)
sprite.run(SKAction.moveTo(y: 300, duration: 5))
}
}
如果您想从节点内容的一部分创建纹理,那么您可以使用 SKView 的 texture(from:crop:) 方法进行一些裁剪。
您可能必须使用 CoreGraphics 来执行此操作。使用 SKTexture.cgImage()
方法将 SKTextures
转换为 CGImage
,使用 CoreGraphics 组合它们,然后从结果中创建一个新纹理。 SKTexture.init(cgImage:)
方法让您使用 CGImage 对象构建纹理。
我使用 Core Graphics 的次数不多,但这里有一些相关阅读的链接。我想你会想要使用 CGLayer
class 来告诉 CoreGraphics 如何堆叠纹理并随着时间的推移重用精灵纹理,以便 CoreGraphics 可以缓存它以加快速度。
Core Graphics 使用 Quartz 2D 进行快速的 2D 图形操作。我没怎么玩过它,但我想它应该是你要找的。
参考资料:
- SKTexture相关:
- 核心图形相关:
- 额外参考:
关注我,我觉得很有趣!
编辑 1:
您还必须在精灵上使用 SKMutableTexture
。 class 允许动态更改纹理数据。
我正在开发 ios 应用程序。我在屏幕上有一个 SKSpriteNode,我从用户那里得到一张我存储为 SKTexture 的绘图。我想将这两者结合起来,并将它们作为一个新的 SKSpriteNode 引入。
问题:我找不到关于如何将 SKSpriteNode 合并到 SKTexture 中的文档。我确定有办法做到这一点。有人会有这方面的示例代码吗?
不确定 "merge" 是什么意思。如果您想使用现有的 SKTexture 创建一个新的 SKSpriteNode 那么这可能是您正在寻找的代码:
let newSprite = SKSpriteNode(texture: yourSKTexture)
您可以使用一个容器来容纳两个精灵,并使用 SKView 的 texture(from:) 方法从中创建一个纹理,如下所示:
override func didMove(to view: SKView) {
backgroundColor = .black
let container = SKNode()
let left = SKSpriteNode(color: .purple, size: CGSize(width: 100, height: 100))
let right = SKSpriteNode(color: .yellow, size: CGSize(width: 100, height: 100))
container.addChild(left)
container.addChild(right)
left.position.x = 50
right.position.x = -50
addChild(container)
if let texture = view.texture(from: container) {
let sprite = SKSpriteNode(texture:texture)
addChild(sprite)
sprite.run(SKAction.moveTo(y: 300, duration: 5))
}
}
如果您想从节点内容的一部分创建纹理,那么您可以使用 SKView 的 texture(from:crop:) 方法进行一些裁剪。
您可能必须使用 CoreGraphics 来执行此操作。使用 SKTexture.cgImage()
方法将 SKTextures
转换为 CGImage
,使用 CoreGraphics 组合它们,然后从结果中创建一个新纹理。 SKTexture.init(cgImage:)
方法让您使用 CGImage 对象构建纹理。
我使用 Core Graphics 的次数不多,但这里有一些相关阅读的链接。我想你会想要使用 CGLayer
class 来告诉 CoreGraphics 如何堆叠纹理并随着时间的推移重用精灵纹理,以便 CoreGraphics 可以缓存它以加快速度。
Core Graphics 使用 Quartz 2D 进行快速的 2D 图形操作。我没怎么玩过它,但我想它应该是你要找的。
参考资料:
- SKTexture相关:
- 核心图形相关:
- 额外参考:
关注我,我觉得很有趣!
编辑 1:
您还必须在精灵上使用 SKMutableTexture
。 class 允许动态更改纹理数据。