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);
}
}
}