Sprite-kit 优化的批处理和纹理共享
Sprite-kit optimized batching and texture sharing
有关 SpriteKit 最佳实践的 Apple 视频之一介绍了使用批处理来限制绘制调用。然后它以某种方式引用使用纹理图集,以便您可以同时绘制多个不同的纹理。
谁能解释一下我是如何做到这一点的?
观看视频:https://developer.apple.com/videos/play/wwdc2014/608/
在 22:22 的演示文稿中。
可能需要从 20:00 - 23:00 观看才能获得全貌。
如何才能在 1 个抽奖券中抽到这些直升机?
补充问题。我如何在没有代码的情况下获得同样的效果?在 sks 文件中添加直升机精灵并指定纹理?
首先,创建一个纹理图集并将其添加到您的项目中
- 在您的项目目录中创建一个扩展名为 .atlas 的文件夹
- 将直升机零件图像添加到文件夹
- 将文件夹添加到您的项目(通过右键单击 Xcode 的文件导航器并选择 "Add Files to "[您的项目]...”选项)
通过将以下内容添加到 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")
最后,assemble 带有零件的直升机。每个部分的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
有关 SpriteKit 最佳实践的 Apple 视频之一介绍了使用批处理来限制绘制调用。然后它以某种方式引用使用纹理图集,以便您可以同时绘制多个不同的纹理。
谁能解释一下我是如何做到这一点的?
观看视频:https://developer.apple.com/videos/play/wwdc2014/608/
在 22:22 的演示文稿中。
可能需要从 20:00 - 23:00 观看才能获得全貌。
如何才能在 1 个抽奖券中抽到这些直升机?
补充问题。我如何在没有代码的情况下获得同样的效果?在 sks 文件中添加直升机精灵并指定纹理?
首先,创建一个纹理图集并将其添加到您的项目中
- 在您的项目目录中创建一个扩展名为 .atlas 的文件夹
- 将直升机零件图像添加到文件夹
- 将文件夹添加到您的项目(通过右键单击 Xcode 的文件导航器并选择 "Add Files to "[您的项目]...”选项)
通过将以下内容添加到 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")
最后,assemble 带有零件的直升机。每个部分的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