gpt4 book ai didi

sprite-kit - 减少 SpriteKit 中的绘制计数(通过)

转载 作者:行者123 更新时间:2023-12-04 01:37:07 24 4
gpt4 key购买 nike

我想优化绘制计数,但不知道从哪里开始。

有人可以简要解释(或指出正确的方向)哪些因素会影响绘制,是否有查看/调试它们的方法以及是否有任何优化提示?抽奖的最佳次数是多少?

例如,我的游戏为整个 ui 加载一个纹理图集,并使用子节点作为不同游戏菜单的容器(而不是单独的场景)。但是一个屏幕的绘制数是 20+,fps 下降了 10-15,这是一个问题。

最佳答案

好的,游戏场景的领域是由层组成的。每个 zPosition 都引用属于一个层的节点。 (属性被称为 zPosition 的原因是因为它的节点位置沿 zAxis)

enter image description here

如果您有一个带有 4 个 SKSpriteNode 的 gameScene 并如上所示为节点指定了 zPositions,那么系统会将您的意图解释为如上图所示。渲染系统时,绘制计数为 4。绘制计数为 1 时,将渲染所有 zPosition 为 1 的节点。在绘制计数为 2 时,将渲染所有 zPosition 为 2 的节点,依此类推。这被称为画家算法。就像画家作画。

现在说在我们的游戏场景中,我们想将另一个 SKSpriteNode 添加到节点 3。如果我们将它作为子节点添加到节点 3,那么这就是

var ignoresSiblingOrder: Bool { get set }

开始发挥作用。如果设置为 false 那么我们的新节点将在父节点 3 之后呈现。所以它的 zPosition 应该是 3.5。我们的绘制计数现在已增加到 5。如果设置为 true,系统将忽略子/父关系,我们的绘制计数将再次下降到 4,但无法保证系统将首先呈现什么。节点 3 或我们的新节点。这是结果是不确定的,意味着它不会返回相同的结果。有时 node3 会在其子节点之上呈现。其他时候,子节点将呈现在父节点之上。

最后一点也是非常重要的一点是,只有当两个节点之间发生重叠时,系统才会考虑 zPosition。

优化的一个好方法是尽可能制作单一纹理。如果不需要单独的节点,那就不要!创建一个纹理并使用它。

这是关键,可能也是最重要的一点。如果可能,避免节点重叠。 zPosition 仅在节点覆盖期间被考虑在内。如果你有 1000 个节点都具有不同的 zPositions,但没有一个节点重叠,你猜怎么着......你的绘制计数为 1。

如果无法避免节点覆盖,并且在某些情况下通常无法避免。将 ignoreSiblingOrder 设置为 true。 (您实际上不需要这样做,但它使事情变得更简单并允许您指定绘制周期)确保为所有节点设置 zPositions。但要记住,每次您创建一个新的 zPosition 时,只要该节点与另一个节点相交,您就会将绘制计数增加 1。

希望对你有帮助

关于sprite-kit - 减少 SpriteKit 中的绘制计数(通过),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59130913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com