void CMapObjectManager::update(float dt) { MapObject* array[1024] = {0}; int len = 0; assert(m_Objects.size() < 1024); for ( MapObjectList::iterator itr = m_Objects.begin();itr != m_Objects.end(); ) { MapObject* pObject = *itr; // 清理掉被标记为删除的,和没有地图的野对象 if ( !pObject || pObject->GetDeleted() || !pObject->GetMap() ) { CC_SAFE_RELEASE(pObject); itr = m_Objects.erase(itr); continue; } // 合法的对象加入新的列表 array[len++] = pObject; pObject->retain(); ++itr; } // 对新列表按照遮挡关系排序 //qsort(array,len,sizeof(MapObject*),(int (__cdecl *)(const void *,const void *))compare); sortZorder(array,len); for ( int i = 0;i<len;++i ) { array[i]->setLocalZOrder(len-i); array[i]->update(dt); array[i]->release(); array[i] = NULL; } }