/// <summary> /// 物体发生移动时调用 /// </summary> /// <param name="pRect"></param> internal void Move(MGFObject pRect) { Quadtree now = RetrieveQt(pRect); //计算该物体目前所在的位置是否与前一帧所在位置一致 if (!dic.ContainsKey(pRect) || dic[pRect] == null) { return; } if (now != dic[pRect]) { //不一致时重新插入物体 dic[pRect].Remove(pRect); now.Insert(pRect); } }
/// <summary> /// 物体发生移动时调用 /// </summary> /// <param name="pRect"></param> internal bool Move(MGFObject pRect) { Quadtree now = RetrieveQt(pRect); if (!dic.ContainsKey(pRect) || dic[pRect] == null) { return(false); } //计算该物体目前所在的节点是否与前一帧所在位置一致 if (now != dic[pRect]) { //不一致时重新插入物体 dic[pRect].Remove(pRect); now.Insert(pRect); return(true); } else { return(false); } }
/// <summary> /// 初始化 /// </summary> /// <param name="mgfList"></param> /// <param name="planePos"></param> public void Init(MGFObject[] mgfList, Rectangle planePos) { m_Qt = new Quadtree(0, planePos); if (mgfList != null && mgfList.Length != 0) { for (int i = 0; i < mgfList.Length; i++) { mgfList[i].Init(); mgfList[i].MGFEnable(); m_Objects.Add(mgfList[i]); if (mgfList[i].IsCollisionAble != false) { m_Qt.Insert(mgfList[i]); } if (mgfList[i].IsStatic == false) { m_DynamicObjs.Add(mgfList[i]); } } } }
/// <summary> /// 添加物体 /// </summary> /// <param name="mGFObject"></param> public void AddObject(MGFObject mGFObject) { m_Qt.Insert(mGFObject); }