Sprite kit 精灵套件:精灵z顺序

Sprite kit 精灵套件:精灵z顺序,sprite-kit,Sprite Kit,如何更改精灵套件中精灵的z顺序 Cocos2d代码: [parentNode addChild:sprite1 z:3]; [parentNode addChild:sprite2 z:2]; [parentNode addChild:sprite3 z:1]; 我在精灵套件中尝试了下面的代码…但它并没有改变z顺序 [parentNode insertChild:sprite1 atIndex:3]; [parentNode insertChild:sprite2 atIndex:2]; 对

如何更改精灵套件中精灵的z顺序

Cocos2d代码:

[parentNode addChild:sprite1 z:3];
[parentNode addChild:sprite2 z:2];
[parentNode addChild:sprite3 z:1];
我在精灵套件中尝试了下面的代码…但它并没有改变z顺序

[parentNode insertChild:sprite1 atIndex:3];
[parentNode insertChild:sprite2 atIndex:2];
对于绘制顺序,请使用节点的属性:

zPosition节点相对于其父节点的高度

默认值为 0.0. 正z轴向查看器投影,以便z值较大的节点更靠近查看器。当节点树是 渲染时,每个节点的高度(以绝对坐标表示)为 计算,然后从最小z轴渲染树中的所有节点 值转换为最大z值。如果多个节点共享相同的z位置, 将对这些节点进行排序,以便在其父节点之前绘制父节点 子对象、子对象和兄弟对象将按照它们在中出现的顺序进行渲染 它们的父项的子项数组。命中测试在 相反的顺序

SKView类的
ignoresSiblingOrder
属性控制节点 为处于相同z位置的节点启用排序

您也可以使用
insertChild:atIndex:
来影响z顺序,但请记住,索引是数组中对象的索引,而不是
zPosition
(即
atIndex
参数与cococs2d中的
z
参数不同,实际上是相反的)。在较低索引处添加的节点将在较高索引处的节点之前绘制

还要注意,不能在索引超出范围处插入节点。从

[…]不能在大于 数组的当前计数。例如,如果一个数组包含两个 对象,其大小为2,因此可以添加索引为0、1或2的对象。 索引3非法且超出范围;如果尝试在以下位置添加对象: 索引3(当数组的大小为2时),NSMutableArray将引发 例外

我总是只使用:

sprite.zPosition = 13;  
如果我想让它在Z13位置。zPosition越高,精灵离用户越近,它将被渲染并显示在zPosition较小的精灵上。

在Swift中,您可以执行以下操作:

sprite.zPosition = 1

通常,zOrder是,只是为了举例说明:

-1(放在后面)

0(中间也是默认值)

1(放在所有人前面)


当所有对象都具有相同的
zPosition
(例如默认值0.0)并且它们被添加到同一父节点时,它们出现的顺序由代码中的“
addChild
”顺序来确定:最后一个在所有

前面,正如其他人所说,使用节点的
zPosition
属性。但是,如果不想跟踪场景中所有节点的所有不同位置,可以将精灵放置在相对深度处,例如:

newSprite.zPosition = anotherSprite.zPosition + 1
在另一辆雪碧前面放一辆新雪碧。我还保存了100和-100作为精灵,这些精灵必须在前面或后面等位置,无论场景中还有什么。

例如,这里有一个天空节点,一个直升机节点有4个子节点导弹,机身,旋翼1和旋翼2。我们希望转子1和转子2在机身上部,导弹在机身下部

如果天空的.zPosition=0,则天空具有默认的zPosition。
给body.zPosition=100,它将从天空中升起,而body将在天空中可见。以及子节点rotor1、rotor2和飞弹。给出转子1和转子2的z位置z=+1,这给出了机身上部和导弹的z位置z=-1,它给出了机身下部

@learncos2D我已启用了
ignoresSibingOrder
,但具有相同zPosition的精灵仍按我添加到其父对象的顺序渲染。这是不可靠的吗?我觉得如果我需要一些精灵在其他精灵前面绘制,并且将
ignoresSiblingOrder
设置为true,那么我必须显式地设置正确的zPositions,但到目前为止我还没有这样做。