Sprite-Kit:Sprite z-Order

时间:2014-03-10 15:46:55

标签: sprite-kit

如何在Sprite-Kit中更改Sprite的z顺序?

Cocos2d代码:

[parentNode addChild:sprite1 z:3];
[parentNode addChild:sprite2 z:2];
[parentNode addChild:sprite3 z:1];

我在Sprite-Kit中尝试了下面的代码..但它没有改变z-order

[parentNode insertChild:sprite1 atIndex:3];
[parentNode insertChild:sprite2 atIndex:2];

5 个答案:

答案 0 :(得分:30)

对于绘制顺序,请使用节点的zPosition属性:

  

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

     

默认值为   0.0。正z轴向观察者投射,使得具有较大z值的节点更靠近观察者。当节点树是   渲染,每个节点的高度(绝对坐标)是   计算,然后树中的所有节点都从最小的z渲染   值到最大z值。如果多个节点共享相同的z位置,   对这些节点进行排序,以便在它们之前绘制父节点   孩子和兄弟姐妹按照他们出现的顺序呈现   他们父母的孩子阵。命中测试在。处理   相反的顺序。

     

SKView类的ignoresSiblingOrder属性控制是否为节点   为同一z位置的节点启用排序。

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

另请注意,您不能在超出范围的索引处插入节点。来自NSMutableArray docs:

  

[..]你不能在索引大于的位置插入一个对象   数组的当前计数。例如,如果数组包含两个   对象,其大小为2,因此您可以在索引0,1或2处添加对象。   指数3是非法的,不受限制;如果你试图添加一个对象   索引3(当数组的大小为2时),NSMutableArray引发一个   异常。

答案 1 :(得分:4)

在Swift中你可以这样做:

sprite.zPosition = 1

通常 zOrder 只是为了举个例子

-1 (把它放到后面)

0 (中间,它也是默认值)

1 (把它放在所有人面前)

当您的所有对象具有相同的zPosition (例如默认值为0.0)并且它们被添加到同一父节点时,订单会出现由代码中的“addChild”订单建立:最后一个

答案 2 :(得分:1)

我总是只使用:

sprite.zPosition = 13;  

如果我希望它在zPosition 13上.zPosition越高,精灵越接近用户,它将被渲染并显示在具有更小zPosition的精灵上。

答案 3 :(得分:0)

正如其他人所说,我们是节点的zPosition属性。但是如果您不想跟踪场景中所有节点的所有各种zPosition,您可以将Sprite置于与另一个节点相对的深度,例如:

newSprite.zPosition = anotherSprite.zPosition + 1

将newSprite放在anotherSprite前面。我也保存100和-100的精灵必须在正面或背面等,无论场景中是什么。

答案 4 :(得分:0)

 from Apple Documentary for sprite kit 例如,在这里想想,有一个空中节点,一个直升机节点有4个子节点,导弹分别是机身,旋翼1和旋翼2。我们希望旋翼1和旋翼2在机身上方,而导弹在机身下方。

second image

给出天空的.zPosition = 0,这使天空具有默认的zPosition。 并给它body.zPosition = 100,它将在天空之上,而身体在天空之上可见。子节点rotor1,rotor2和导弹。给定转子1和转子2的z位置,z = +1,这使从身体上方得到,并给出导弹的zPosition z = -1,从身体得到下方。