Sprite kit 精灵套件:精灵z顺序
如何更改精灵套件中精灵的z顺序 Cocos2d代码: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]; 对
[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,但到目前为止我还没有这样做。