【Unity】NGUI背包系统——背包整理按钮的改进

版权声明:本文为博主原创文章,未经博主允许不得转载。该博客所用图片资源均作学习分享用途,请勿用于商业行为。传播者自负。 如果本博客所写文章侵犯到您的权益,请主动联系留言,我们将及时删除相关内容。 https://blog.csdn.net/BuladeMian/article/details/53365357

当我运行上一篇写的文章内的程序的时候,发现运行缓慢

而且

TweenCoLor

的On Finished调用

只要按钮的颜色发生改变,这个调用就会发生。


上一篇文章,会导致系统变慢,程序失控

这一篇是优化后


	public void BagClear()
	{
		BagJudget ();
	}//
	private void BagJudget()
	{
		//这个函数是判断函数,用于判断背包整理次数的多少
		//runtime是判断函数的变量,即  需要背包整理的次数
		int runtime = 0;
		for (int i = 0; i < cells.Length; i++)
		{
			//遍历每个格子,找到空格子
			if(cells[i].transform.childCount == 0)
			{
				for (int j = i; j < cells.Length; j++)
				{
					//找到空格子后面需要整理的格子,找到即 背包整理的次数 +1
					if(cells[j].transform.childCount > 0)
					{
						runtime++;
					}//
				} //
			}//
		}//
		print ("runtime"+runtime);
		for(int m = runtime;m>0;m--)
		{
			//背包整理次数开始运行,并且自减
			BagClearRun();
		}
	}//
	private void BagClearRun()
	{
		int k = 0;
		int i = 0;
			for (i = k; i < cells.Length; i++)
			{
				if(cells[i].transform.childCount == 0)
				{
				//遍历每个格子,找到空格子
					k = i;
					break;
				}
				print("1");
			}
			print("2");
			for (int j = i; j < cells.Length; j++)
			{
				if(cells[j].transform.childCount > 0)
				{
				//遍历空格子之后的每个格子,找到需要整理的有物品的格子
					GameObject go1 = cells[j].transform.FindChild("Item(Clone)").gameObject;
					go1.transform.SetParent(cells[k].transform);
					go1.transform.localPosition=Vector3.zero;  
					break;
				}
			} 
		print ("clear");
	}


按照冒泡排序法等排序法

*1

改变格子下面的子类,移动这个物体成为空格子的子类

1.找到空格子,如果空格子后面有需要向前清理的格子,即计算次数+1.

2.遍历每个要向前清理的格子,使其向前面第一个空格子移动

3.当计算次数不是>0的时候,就是清理完毕的时候

然后遍历运行算法,使其按照计算方法排序

*2

当然还有另外一种思路,就是创建的背包的物品全部为背包物体的子类,而不是每个格子的子类

这样只用记录每个格子或者图片的相对于父类背包物品栏的坐标,即相对坐标

就可以实现清理物品栏的效果。

阅读更多
换一批

没有更多推荐了,返回首页