【NGUI】grid下面的item的重复利用
http://blog.csdn.net/u012091672/article/details/21159075
解决的问题
使用grid放置item的时候,每次数据可能都不一样,但是每次都删除grid下面的节点,之后动态创建新的item是比较浪费的。 写个简单的工具函数,原理很简单。 、先获得grid下面的可用item 、根据data的大小进行初始化 、每次在可用的item列表里面获取新的item,如果不够用了,就创建新的item 、disable掉没用的item 附:每个grid下面预先要有一个名字包含“Template_”的模板item。这个模板不会被用,之前尝试过把这个模板也当做一个item正常使用,但是有些NGUI的widget会出现BUG。 [csharp] view plaincopy
using UnityEngine;
using System.Collections.Generic;
//qq group :333417608
public class UITools
{ /* usage:
List<GameObject> canUseList = UITools.GetCanUseItemList(gridRoot);
for (int i=0; i<totalData.Length; ++i)
{
GameObject go = UITools.GetNewItemObj(canUseList, gridRoot, prefab);
// do init
}
UITools.UnActiveUnuseItem(canUseList); // prefab is the template
*/ static public GameObject GetNewItemObj (List<GameObject> canUseList, GameObject root, GameObject prefab)
{
GameObject go = null;
if (canUseList.Count > ) {
go = canUseList [];
canUseList.RemoveAt ();
} else {
go = NGUITools.AddChild (root, prefab);
}
NGUITools.SetActiveSelf (go, true);
return go;
} static public T GetNewItemObj<T> (List<T> canUseList, GameObject root, GameObject prefab) where T : Component
{
T item = null;
if (canUseList.Count > ) {
item = canUseList [];
canUseList.RemoveAt ();
} else {
item = NGUITools.AddChild (root, prefab).GetComponent<T>();
}
item.name = string.Format("{0:D3}", );
NGUITools.SetActiveSelf (item.gameObject, true);
return item;
} static public List<GameObject> GetCanUseItemList (GameObject root)
{
List<GameObject> itemList = new List<GameObject> ();
Transform rootT = root.transform;
for (int i=; i<rootT.childCount; ++i) {
GameObject go = rootT.GetChild (i).gameObject;
if (IsNotTemplateGameObject(go))
{
itemList.Add (go);
}
}
return itemList;
} static public List<T> GetCanUseItemList<T> (GameObject root) where T : Component
{
List<T> childrenList = new List<T> ();
Transform rootT = root.transform;
for (int i=; i<rootT.childCount; ++i) {
Transform child = rootT.GetChild (i);
T t = child.GetComponent<T> ();
if (t != null && IsNotTemplateGameObject(child.gameObject)) {
childrenList.Add (t);
}
}
return childrenList;
} static public void UnActiveUnuseItem (List<GameObject> canUseList)
{
foreach (var item in canUseList) {
NGUITools.SetActiveSelf (item, false);
}
} static public void UnActiveUnuseItem<T> (List<T> canUseList) where T : Component
{
foreach (var item in canUseList) {
NGUITools.SetActiveSelf (item.gameObject, false);
}
} static private bool IsNotTemplateGameObject(GameObject go)
{
bool result = !go.name.ToLower().Contains("template_");
if (!result && go.activeSelf)
{
NGUITools.SetActiveSelf(go, false);
}
return result;
}
}
【NGUI】grid下面的item的重复利用的更多相关文章
- C# 第三方控件 下面的Item不显示了
当高版本的第三方版本 替换成低版本的第三方后,item,不显示了之后,请试着再次在这基础上添加一个Item,观察这个Item和原来已经在的却不显示的Item的区别在哪里.然后去源程序正常文件哪里 将这 ...
- 如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭
如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭,应该是因为你没有把主要内容放在DrawerLayout标签下的第一位. The main content vi ...
- eclipse 下面的folder,source folder,package的区别与作用
首先明确一点,folder,source folder,package都是文件夹,既然是文件夹,那么任何的文件都可以往这三种文件夹下面的放.1.他们的区别folder就是普通的文件夹,它和我们wind ...
- 根据div 标签 查看数组@class=modulwrap 下面的/table/tbody/tr/td
<div class="modulwrap"> <div class="request_title"> <span class=& ...
- jz2440: linux/arch/arm/下面的plat-和mach-
jz2440: linux/arch/arm/下面的plat和mach plat-s3c24xxmach-s3c2440mach-s3c2410 ====================== 1. 三 ...
- syslog之三:建立Windows下面的syslog日志服务器
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- webkit下面的CSS设置滚动条
webkit下面的CSS设置滚动条 1.主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端 ...
- Lazarus下面的javascript绑定另外一个版本bug修正
Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$EN ...
- 给虚拟机下面的ubuntu系统增加硬盘存储空间
给虚拟机下面的ubuntu系统增加硬盘存储空间 由于ubuntu系统是安装在vsphere上面的,所以可能会和vmware上面的有一点区别,打开exsi系统的配置页面,如下图所示. 选择添加存储器 ...
随机推荐
- C#中的yield return与Unity中的Coroutine(协程)(下)
Unity中的Coroutine(协程) 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件, Image: 将以下代码绑定到Image using ...
- js事件代理
需要注意的blog:http://blog.csdn.net/majian_1987/article/details/8591385 一篇博客看懂 http://blog.csdn.net/maji ...
- words in view Moqui resource code
annotation:注释 注解 documentation:文件 证明文件 embed:嵌入 context:环境 上下文 explicity: 明确的 明白的 conversion: 转化
- 多个TableView的练习
效果图: 左边图片的代码: // // SecViewController.m // UI__多个TableView练习 // // Created by dllo on 16/3/17. // Co ...
- ajax中的application/x-www-form-urlencoded中的使用
ajax中的application/x-www-form-urlencoded中的使用一,HTTP上传的基本知识 在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定 ...
- abstract和接口
接口只包含常量和抽象方法,不能实例化. abstract: 1.抽象类不能实例化, 2.可以没有抽象方法.但有了抽象方法,一定要被定义为抽象类. 3.子类没有实现父类中所有的抽象方法.子类也必须定义为 ...
- Java-Vector
package 集合类.list类; import java.util.Vector; public class Vector类 { public static void main(String[] ...
- 【HDU 5438】Ponds
题意 不断删去度数为1的点,最后求有奇数个点的联通块的权值之和. 分析 存边的时候,要头尾都存这个边.用dfs或者队列删点,再用并查集或者dfs确定联通块,然后统计联通块的点数,最后累加. 我自己写的 ...
- java连接mysql(二)
模拟转账成功时的业务场景 import java.sql.*; public class TransactionDemo1 { public static void main(String[] arg ...
- POJ3628 Bookshelf 2(01背包+dfs)
Bookshelf 2 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8745 Accepted: 3974 Descr ...