MapServer.GameMap.Process C# (CSharp) Method

Process() public method

public Process ( ) : void
return void
        public void Process()
        {
            if (mDicObject.Count == 0 &&
                mListDeleteObj.Count == 0 &&
                mListAddObj.Count == 0) return; //地图没人..就不处理了
            //删除离开地图的玩家
            if (mListDeleteObj.Count > 0)
            {
                uint id;
                for (int i = 0; i < mListDeleteObj.Count; i++)
                {
                    BaseObject obj = mListDeleteObj[i] as BaseObject;
                    if (obj.type == OBJECTTYPE.MONSTER ||
                        obj.type == OBJECTTYPE.GUARDKNIGHT) id = obj.GetTypeId();
                    else id = obj.GetGameID();
                    //obj.Dispose();
                    //if (obj.type == OBJECTTYPE.PLAYER)
                    //{
                    //    UserEngine.Instance().RemovePlayObject(obj as PlayerObject);
                    //}
                    if (mDicObject.ContainsKey(id)) { mDicObject.Remove(id); }
                }
                mListDeleteObj.Clear();
            }

            //要添加的对象
            if (mListAddObj.Count > 0)
            {
                for (int i = 0; i < mListAddObj.Count; i++)
                {
                    BaseObject obj = mListAddObj[i];
                    if (obj.type == OBJECTTYPE.MONSTER) //怪物是以typeid为主键
                    {
                        mDicObject[obj.GetTypeId()] = obj;
                    }
                    else mDicObject[obj.GetGameID()] = obj;
                }
                mListAddObj.Clear();
            }
              //地图所有对象run
            //需要拷贝一份词典,因为在循环里面会改变该词典的集合--
            //需要优化 这里效率太低了
               // Dictionary<uint, BaseObject> tempdic = new Dictionary<uint, BaseObject>(mDicObject);
            //2015.11.12 已解决,声明了一个删除的列表- mListDeleteObj 在removeobj后加入到列表 process再进行删除-内存不涨了 好开心o(∩_∩)o 哈哈
            foreach (BaseObject obj in mDicObject.Values)
            {
                if (!obj.Run())
                {
                    mListDeleteObj.Add(obj);
                }
            }
        }