コード例 #1
0
        public void Update(float dt)
        {
            m_fElapseTime += dt;
            if (m_fElapseTime < 0.5f)
            {
                return;
            }
            {
                Dictionary <string, List <IGameObject> > .Enumerator iter = m_mapRenderObjIdle.GetEnumerator();
                while (iter.MoveNext()) // 缓存池里面有数据
                {
                    List <IGameObject> lstRemove = iter.Current.Value;
                    for (int i = 0, imax = lstRemove.Count; i < imax; ++i)
                    {
                        var item = lstRemove[i];
                        if (item.bCacheForever)
                        {
                            continue;
                        }
                        if (Time.realtimeSinceStartup - item.IdleStartTime > 60)
                        {
                            AssetManager.Instance().RemoveGameObjFromPool(item);
                            lstRemove[i].Destroy(); //一个个慢慢删除避免GC过大造成卡顿
                            lstRemove.RemoveAt(i);
                            break;
                        }
                    }
                }
            }

            {
                // 特效更新时间
                Dictionary <int, IEffect> .Enumerator effectiter = m_mapEffect.GetEnumerator();
                while (effectiter.MoveNext())
                {
                    IEffect e = effectiter.Current.Value;
                    if (e != null)
                    {
                        e.Update();
                    }
                }
                // 移除播放完成的特效
                for (int i = 0, imax = m_lstEffectTodelete.Count; i < imax; i++)
                {
                    IEffect obj = null;
                    if (m_mapEffect.TryGetValue(m_lstEffectTodelete[i], out obj))
                    {
                        if (obj != null)
                        {
                            obj.OnComplete();
                            RemoveEffectObj(obj);
                        }
                    }
                }
                m_lstEffectTodelete.Clear();
                //删除特效
                Dictionary <string, List <IEffect> > .Enumerator effectMaoIter = m_mapEffectObjIdle.GetEnumerator();
                while (effectMaoIter.MoveNext()) // 缓存池里面有数据
                {
                    List <IEffect> lstRemove = effectMaoIter.Current.Value;
                    for (int i = 0, imax = lstRemove.Count; i < imax; ++i)
                    {
                        var item = lstRemove[i];
                        if (item.bCacheForever)
                        {
                            continue;
                        }
                        if (Time.realtimeSinceStartup - item.IdleStartTime > 60)
                        {
                            lstRemove[i].Destroy();
                            lstRemove.RemoveAt(i);
                            break;
                        }
                    }
                }
            }
            m_fElapseTime = 0;
        }