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 文件中添加直升机精灵并指定纹理?

首先,创建一个纹理图集并将其添加到您的项目中

  1. 在您的项目目录中创建一个扩展名为 .atlas 的文件夹
  2. 将直升机零件图像添加到文件夹
  3. 将文件夹添加到您的项目(通过右键单击 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