动态设置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) ;
			}
		}
	}
	//重新设置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) ;
	}
时间: 2024-08-14 17:20:24

动态设置CCNode的zOrder的相关文章

动态设置图片的宽度和高度

动态设置图片控件的宽度和高度: imageView.getLayoutParams().width=600;imageView.getLayoutParams().height=400; 设置图片(src): imageView.setImageResource(resId); android获得屏幕高度和宽度: 1.WindowManager wm = (WindowManager) getContext()                     .getSystemService(Cont

JMeter非GUI方式运行时动态设置线程组及传参

在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定运行多少次: 2.访问的目标地址变化了,端口也变化了,需要重新指定. 上面的需求如果有GUI方式运行,这都不是问题,直接在脚本上进行修改即可以了. 但是性能测试自动化是以非GUI方式运行的,如果要修改测试计划就比较麻烦了. 下面来说说如何简单的搞定这些问题: 1.指定运行多少线程   我们知道JMeter测试计划在运行Sampler之前先加载运行属性(jmeter.properties,system.prope

动态设置radio的默认值

根据后台传值动态设置radion的默认值,一般设置默认值的标签为:checked="checked".具体动态设置默认值得代码如下: <tr> <td width="150" height="30" align="right">性  别:</td> <td width="250" align="left"> <input type=&

js动态设置select的默认值

根据需求动态的设置select的默认值,若要选定默认则代码selected="selected".动态设置则如下所示: <html> <table> <tr> <td width="250" align="left"> <select name="job" size="1" > <option value="普通会员"&g

如何在Android中为TextView动态设置drawableLeft等

如何在Android中为TextView动态设置drawableLeft等 两种方式: 方式1:手动设置固有边界 1 Drawable drawable = getResources().getDrawable(resId); 2 //注意查看方法TextView.setCompoundDrawables(Drawable, Drawable, Drawable, Drawable) 3 //的注释,要求设置的drawable必须已经通过Drawable.setBounds方法设置过边界参数 4

Activiti动态设置办理人扩展

作者:邓家海 扩展是要求对Activiti基础有一定的功底的 我们一直在努力,不是为了改变世界,只是不让世界去改变我们. 关键词:Assignee.Candidate users.Candidate groups:setAssignee.taskCandidateUser.taskCandidateGroup 主要解决问题:Activiti动态给任务节点设置办理人. 情景: 我们在做工作流开发,学习的时候一般都有这么一个过程: 第一阶段:最开始学习的时候,喜欢在设计流程的时候写死人名(即)办理人

easyui表单多重验证,动态设置easyui控件

要实现的功能:在做添加学生信息的时候,利用easyui的验证功能判断 学号是否重复和学号只能为数字 最终效果如下图: 但在做这个的过程中,遇到了一系列的问题: 扩展validatebox的验证方法,最开始的验证代码如下: 1 //学号格式只能为数字 ****//这里没有问题**** 2 number: {//value值为文本框中的值 3 validator: function (value) { 4 var reg = /^[0-9]*$/; 5 return reg.test(value);

android 用java动态设置布局(增添删除修改布局)

XML对开发者来说十分的方便,不仅使用起来简单,而且能够及时调试,修改界面之后马上能看到效果. Java设置布局不具有这个优势.但是java却可以动态对布局进行操作,这是xml所做不到的.笔者认为,新手索要掌握的java动态设置布局主要有两点,一方面是对布局的属性进行修改,另一方面是增添和删除控件. 首先说一下动态设置布局在项目中的应用,拿高德地图举个例子,如下图:    我们可以看到,高德地图的默认界面与点击地图之后的界面是不一样的,上面同样的控件在layout中的位置也不一样,这个用xml便

动态设置easyui datagrid URL

动态设置easyui datagrid URL$('#tt').datagrid({url:'website/jsp/servlet',        queryParams:{method:'xx', Id:IDValue }        });