使用spritekit传递单个绘图中的节点?

时间:2014-04-04 01:35:42

标签: drawing sprite-kit sktextureatlas

当我四处寻找有关spritekit纹理的信息时,我偶然发现了这句话:

  

如果节点的所有子节点使用相同的混合模式和纹理图集,则Sprite Kit通常可以在单个绘图过程中绘制这些精灵。另一方面,如果组织子项以便为每个新精灵更改绘制模式,那么Sprite Kit可能会作为每个精灵的一个绘图传递执行,这是非常低效的。

但请查看:

具有相同纹理的瓷砖(我向你保证它是一种纹理,而不仅仅是一种颜色) Untextured tiles

具有自己纹理的瓷砖 Textured tiles

绘制计数的差异为40,尽管所有使用的纹理来自相同的图集。

我在解释'atlas'这个词错了吗?

这是我存储图像的地方:

texture atlas

我的例子是'纹理图集',还是'atlas'的定义是一个单独的.png,其中包含了所需的所有图像,并且单个图块是从它切片的?

或者问题可能在于我如何加载/其他东西?

谢谢!

1 个答案:

答案 0 :(得分:6)

这里的问题很可能是因为节点图本身。假设您有100个精灵作为场景的孩子,没有他们自己的子孩子,并且他们都使用来自相同地图集和默认混合模式的纹理,然后Sprite Kit将在一次绘制调用中批量绘制这100个精灵。

但是,如果这些tile sprite有自己的子节点,可能是用于调试的形状或标签节点,那么这将“中断”批量绘制操作。

检查节点图。确保所有瓷砖精灵都是同一父母的孩子,并且没有自己的孩子,使用相同图集中的相同混合模式和纹理。然后批量绘图肯定会有用。

如果这不起作用,请验证tiles.atlas文件夹是否已正确转换为包中的纹理图集。如果您打开已编译的应用程序包,您应该找到一个名为“tiles.atlasc”的文件夹,其中包含一个plist和一个或多个png文件,其中包含该文件夹的所有单个图像。此外,这些单独的图像都不应该出现在捆绑中 - 如果它们作为单个文件使用与图册中相同的名称添加到捆绑包中,那么Sprite Kit将默认加载单个图像文件而不是从纹理图集中获取它们