动态设置CCNode的zOrder
2015-04-02 16:52
309 查看
游戏中有一个需求,敌人在移动的过程中,可能会由于速度的不同,产生相互的遮挡。这个需要动态的设置敌人的zOrder,在TestCpp中见过SpriteTest中的设置zOrder,就模仿着写了个。
基本思路:
1. 确定一个评定渲染顺序的标准
2. 按评定标准给需要动态渲染的对象排序
3. 重置每个对象的zOrder,并reOrder
测试的时候用的是静态图,产生了200个对象,在电脑上FPS:55-60,在手机上(红米1S)FPS:20左右,100个对象,手机上:45左右。
设置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) ; } } } //重新设置zOrder for (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) ; }
相关文章推荐
- 在winnt以上版本中对打印机纸张的动态设置方法
- 动态改变屏幕设置
- 动态设置页面标题(转)
- 类加载器工具类:动态设置classpath,获得加载类列表等
- 如何在程序中动态设置墙纸
- 如何动态设置全局theme,及在web.config中读取pages节点的内容。
- 动态设置页面标题(转)
- ASP.NET动态设置页面标题
- 后台动态设置前台标签内容和属性
- 如何在程序中动态设置墙纸
- [转贴]ASP.NET中动态修改web.config中的设置项目
- ASP.NET中动态修改web.config中的设置项目(CS页代码)
- [Java]让FCKEditor支持动态设置文件目录
- 服务器端动态加载DataGrid控件并设置其属性
- 如何编程动态改变IE的代理服务器设置, 并且使之马上生效!
- 如何在程序中动态设置墙纸
- (原创)后台动态设置前台标签内容和属性
- 动态设置水晶报表
- 利用窗体的RecordSource属性动态设置数据源
- 后台动态设置前台标签内容和属性