Sprite-kit优化了批处理和纹理共享

时间:2017-06-11 05:55:20

标签: ios swift xcode sprite-kit assets

关于SpriteKit最佳实践的Apples视频之一涵盖了使用批处理来限制绘制调用。然后它以某种方式引用纹理图集,以便您可以同时绘制多个不同的纹理。

有人可以解释我是如何做到这一点的吗?

观看视频:https://developer.apple.com/videos/play/wwdc2014/608/

在演讲中的22:22。

可能需要在20:00 - 23:00之间观看才能全面了解。

如何在1次平局中画出这些直升机?

其他问题。如何在没有代码的情况下获得相同的效果?添加直升机精灵并在sks文件中分配纹理?

1 个答案:

答案 0 :(得分:3)

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

  1. 在项目目录中创建一个扩展名为.atlas的文件夹
  2. 将直升机部件图像添加到文件夹
  3. 将文件夹添加到项目中(右键单击Xco​​de的文件导航器并选择"将文件添加到" [您的项目] ..."选项)
  4. 通过将以下内容添加到myService.getUserDetails(paramData).then

    来加载纹理图集
    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

    通过将以下内容添加到GameViewController来显示绘制计数:

        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)
        }