【问题标题】:Issues with batch drawing with atlas files and SpriteKit使用 atlas 文件和 SpriteKit 进行批处理绘制的问题
【发布时间】:2017-06-11 02:18:23
【问题描述】:

所以我在我正在构建的平台游戏中遇到了延迟问题。所以我正在研究如何提高性能。

我正在尝试进行批量绘图,以减少绘图调用。我有问题。所以有了一个全新的项目:

我有 4 个英雄精灵,所有图像都存储在 .atlas 文件夹中。因此 atlas 文件夹中的每个精灵都有一个 1/2/3 倍的图像。

我将它拖放到 xcassets 文件夹中。然后我去我的 sks 文件创建 4 个精灵并相应地更改纹理。

默认情况下,它们都具有相同的混合模式。我将默认规则设置为 true 以忽略兄弟顺序。所有精灵都在默认的 z 0 层上。我已将其设置为显示抽奖次数。

我希望看到 1 次绘制,因为所有图像都在同一个图集文件中,但我看到了 4 次。

我有什么遗漏吗?

只是好奇我是如何让它正常工作的。感谢您的帮助!!!

【问题讨论】:

    标签: ios swift sprite-kit sprite nodes


    【解决方案1】:

    iOS 9 上的 xcassets 存在一个错误,即使图像放置在 xcassets 中,绘图调用也不会减少。显然,后来的版本已经解决了这个问题,但从那以后我就再也没有用过 xcassets 了。相反,我将图像放在项目中单独的 .atlas 文件夹中,这确实减少了绘制调用。

    尝试放置 4 个具有相同纹理的精灵,然后看看绘制调用是什么。如果精灵使用相同的纹理,它不应该是 4。我还建议添加 8 个精灵(4 个不同的纹理 * 每个 2 个精灵),看看绘制调用是否增加到 8。

    如果绘制调用没有增加,那么我会假设需要 4 个绘制调用来绘制 4 个不同的精灵(如果它们非常复杂的话)。如果绘图调用确实增加,请尝试从 xcassets 中删除图像并将它们放入项目中的单独 .atlas 文件夹中,然后比较绘图调用。

    【讨论】:

    • 感谢 cmets。我也使用 atlas 文件夹而不是 xcassets 进行了测试,得到了相同的结果。如果我使用相同的图像,那么计数确实会下降到 1。我的印象是,如果图像在同一个图集文件中,那么它只需要一个绘图调用。我的图像也没有那么复杂。
    • 这里是一个关于批处理的 Apple 视频链接:developer.apple.com/videos/play/wwdc2014/608。如果你跳到 20-22 分钟,它就会谈论它。
    • 现在看视频 - 也许我也错过了一些东西......在我的 spritekit 游戏中,我得到一个绘制调用每个使用的纹理(使用 .atlas 文件夹),即使在极端情况下进行测试有 1000 个节点,我得到所有节点的大约 25 个绘制调用,它们使用不同的纹理。在 59.something FPS 进行 25 次绘制调用时,性能仍然不错。也许其他人可以对此有所了解,因为也许我使用的方法并不是最佳的,可以很容易地修复....
    • 希望是的,我很好奇我是应该继续寻找答案还是继续前进......
    • 附带说明:我做的另一件优化工作是先从图像创建 SKTextures,然后从纹理创建 SKSpriteNodes(而不是 let node = SKSpriteNode(imageNamed:) 我使用 let node = SKSpriteNode(texture: )。我将纹理保存在内存中以备后用。这样您只需将纹理加载一次到内存中,当您创建具有相同图像的新精灵时不需要重新加载它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-11-21
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多