动态设置CCNode的zOrder

游戏中有一个需求,敌人在移动的过程中,可能会由于速度的不同,产生相互的遮挡。这个需要动态的设置敌人的zOrder,在TestCpp中见过SpriteTest中的设置zOrder,,就模仿着写了个。

基本思路:

1.确定一个评定渲染顺序的标准

2.按评定标准给需要动态渲染的对象排序

3.重置每个对象的zOrder,并reOrder

测试的时候用的是静态图,产生了200个对象,在电脑上FPS:55-60,在手机上(红米1S)FPS:20左右,100个对象,手机上:45左右。

设置zOrder代码如下:

//按Y坐标重新排序,Y值越小,越先渲染for (unsigned int i = 0; i < m_pEnermyArray->count() ; i++){for (unsigned int j = 1 ; j < m_pEnermyArray->count() – 1;j++){int index_1 = i ;int index_2 = j;CCNode * pNode_1 = dynamic_cast<CCNode*>(m_pEnermyArray->objectAtIndex(index_1)) ;CCNode * pNode_2 = dynamic_cast<CCNode*>(m_pEnermyArray->objectAtIndex(index_2)) ;if (pNode_2->getPositionY() < pNode_1->getPositionY()){m_pEnermyArray->exchangeObjectAtIndex(index_1,index_2) ;}}}//重新设置zOrderfor (unsigned int i = 0 ; i < m_pEnermyArray->count() ;i++){int z = ZORDER + i ;CCNode * pNode_1 = dynamic_cast<CCNode*>(m_pEnermyArray->objectAtIndex(i)) ;this->reorderChild(pNode_1,z) ;}

只有一条路不能选择——那就是放弃的路;

动态设置CCNode的zOrder

相关文章:

你感兴趣的文章:

标签云: