cocos2d-x中Zorder和VertexZ属性的区别

1:zOrder 表示节点相对其“兄弟”节点(拥有共同的父节点)Z顺序值。对于像CCSprite这样有视觉呈现的节点,该参数决定了节点的绘制顺序,拥有最小Z值的节点最先被绘制。如果多个节点拥有相同Z值,绘制顺序将由由它们的添加顺序来决定。
2:vertexZ 表示真正的OpenGL 的顶点。OpenGL Z顶点和Cocos2DZ顶点的区别如下:
OpenGL Z修改Z顶点,而非父节点和子节点间的Z顺序。
OpenGL Z可能需要设置2D投影。
如果所有节点使用相同的OpenGL Z顶点,Cocos2D Z顺序仍然保持正常。
使用该值可能会破坏Cocos2D中父节点 - 子节点Z顺序,所以通常较少使用。

正常情况下都是关心zOrder就行了,它决定了同一深度情况下绘制的顺序,(因为cocos2d默认是不启用深度测试的),不过它是在加入ccnode的时候确定了,后面要改的话必须用reorderchild方法,这个其它是用数组重新排序了,如果结点很多,其实效率是较低的。
如果你把cocos2d的深度测试打开,这个vertexz才能看出效果,这个是openGl里的顶点数据的z轴的值,就是相当于现实世界里的远近,不管你的zorder是多少,总是vertexz远的先绘制,近的后绘制。(但是深度测试的不同模式对绘制是有影响的,一两句话这里说不太明白,你可以看看cocos2d源吗里关于director类设置尝试测试的地方的opengl语句的意思,楼上说了tilemape的例子用了vertexz,是的,要用tilemap就得启用深度测试就是这个原因)
不能说要用tilemap就得用尝试测试,应该是在需要遮挡效果的tilemap里的话是需要的。(也还是不绝对,如果你愿意用数组直接排序每一个小磁砖的绘制顺序的话,也可以那样做,不过我相信不会有人那样的)
在tilemap里,为了保证正确的遮挡顺序,我们通常对tilemap里的地图层设置cc_vertexz属性设置一个很小的数,然后对其它的物体层cc_vertexz设置为automatic,这样来达到对tilemap里的磁砖的vertexZ自动排序的效果,但是只这样做了确实是改变了每个磁砖的z,但是事实上只这样做并不会用正确的效果,如果要让vertexz有作用,就必需要启用openGLES的深度测试,所以我才这样说。深度测试就是用来根据vertexz来决定绘制的遮挡效果的。当然,2d投影也必需设置。

同时可参考http://www.ityran.com/archives/3480
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值