动态设置CCNode的zOrder

本文探讨了如何在游戏开发中通过动态调整敌人组件的zOrder来优化渲染性能,通过按Y坐标重新排序,使得在不同设备上都能获得更流畅的游戏体验。实验结果显示,对于200个对象,电脑上可达55-60 FPS,手机上(如红米1S)则为20左右;当对象减少到100个时,手机性能提升至45 FPS。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏中有一个需求,敌人在移动的过程中,可能会由于速度的不同,产生相互的遮挡。这个需要动态的设置敌人的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) ;
			}
		}
	}
	//重新设置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) ;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值