Apple 关于 SpriteKit 最佳实践的视频之一介绍了使用批处理来限制绘制调用。然后它引用了使用纹理图集的方式,以便您可以同时绘制多个不同的纹理。
有人可以解释一下我是如何实现这一目标的吗?
观看视频:https://developer.apple.com/videos/play/wwdc2014/608/
22:22 演示中。
可能需要在 20:00 - 23:00 期间观看才能了解完整情况。
如何才能在 1 次绘制过程中绘制这些直升机?
附加问题。我如何在没有代码的情况下获得同样的效果?在 sks 文件中添加直升机 Sprite 并分配纹理?
最佳答案
首先,创建纹理图集并将其添加到您的项目中
- 在项目目录中创建一个扩展名为 .atlas 的文件夹
- 将直升机零件图像添加到文件夹
- 将文件夹添加到您的项目中(通过右键单击 Xcode 的文件导航器并选择“将文件添加到“[您的项目]...”选项)
通过将以下内容添加到 didMove(to view:SKView)
来加载纹理图集:
let atlas = SKTextureAtlas(named: "helicopter")
然后为每个部分创建纹理
let body = atlas.textureNamed("body.png")
let rotor = atlas.textureNamed("rotor.png")
let missiles = atlas.textureNamed("missiles.png")
最后,用零件组装直升机。每个部分的 zPosition
决定了它们的绘制顺序。
let startX:CGFloat = -200
for i in 0...10 {
let helicopterBody = SKSpriteNode(texture: body)
helicopterBody.zPosition = 100
helicopterBody.position = CGPoint(x: startX + CGFloat(i*40), y: 0)
let helicopterRotor = SKSpriteNode(texture: rotor)
helicopterRotor.position = CGPoint(x: startX + CGFloat(i*40), y: 0)
helicopterRotor.zPosition = 200
let helicopterMissiles = SKSpriteNode(texture: missiles)
helicopterMissiles.position = CGPoint(x: startX + CGFloat(i*40), y: 0)
helicopterMissiles.zPosition = 0
addChild(helicopterBody)
addChild(helicopterRotor)
addChild(helicopterMissiles)
}
通过将以下内容添加到 GameViewController 来显示绘制计数:
view.showsDrawCount = true
关于ios - Sprite-kit 优化了批处理和纹理共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480812/