如何在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];
答案 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)