//合并 public String combine(TileGfxManager src_Manager, ArrayList mapsID) { String errorString = null; for (int srcConIndex = 0; srcConIndex < src_Manager.Count(); srcConIndex++) { TileGfxContainer srcContainer = src_Manager[srcConIndex]; //检查是否被源关卡所用到 bool usingBySrc = false; for (int j = 0; j < mapsID.Count; j++) { MapElement map = src_Manager.mapsManager[(int)mapsID[j]]; if (map.tileGfxContainer.Equals(srcContainer)) { usingBySrc = true; break; } } if (!usingBySrc) { continue; } TileGfxContainer destContainer = null; //检查重复的图形容器 for (int localConIndex = 0; localConIndex < Count(); localConIndex++) { TileGfxContainer localContainer = this[localConIndex]; if (localContainer.name.Equals(srcContainer.name)) { destContainer = localContainer; break; } } if (destContainer == null) { destContainer = new TileGfxContainer(this, srcContainer.name); this.Add(destContainer); } //转移地图中的图形容器的引用 for (int k = 0; k < src_Manager.mapsManager.Count(); k++) { MapElement map = src_Manager.mapsManager[k]; if (map.tileGfxContainer.Equals(srcContainer)) { map.tileGfxContainer = destContainer; } } //向目标容器添加图形元素 for (int elementIndex = 0; elementIndex < srcContainer.Count(); elementIndex++) { TileGfxElement srcElement = (TileGfxElement)srcContainer[elementIndex]; TileGfxElement newElement = null; //检查重复的图形元素 if (!destContainer.Equals(srcContainer)) { for (int j = 0; j < destContainer.Count(); j++) { TileGfxElement localClip = (TileGfxElement)destContainer[j]; if (localClip.equalsClip(srcElement)) { newElement = localClip; break; } } } if (newElement == null) { newElement = srcElement.Clone(destContainer); } if (!destContainer.Contains(newElement)) { if (!destContainer.Add(newElement)) { errorString = "合并图形容器“" + srcContainer.name + "”时,图形元素数量超出65536。"; break; } } //转移地图中的块的引用 for (int k = 0; k < src_Manager.mapsManager.Count(); k++) { MapElement map = src_Manager.mapsManager[k]; for (int x = 0; x < map.getMapW(); x++) { for (int y = 0; y < map.getMapH(); y++) { MapTileElement mapTile = map.getTile(x, y); if (mapTile.tile_gfx_ground != null && mapTile.tile_gfx_ground.tileGfxElement != null && mapTile.tile_gfx_ground.tileGfxElement.Equals(srcElement)) { mapTile.tile_gfx_ground.tileGfxElement = newElement; } if (mapTile.tile_gfx_surface != null && mapTile.tile_gfx_surface.tileGfxElement != null && mapTile.tile_gfx_surface.tileGfxElement.Equals(srcElement)) { mapTile.tile_gfx_surface.tileGfxElement = newElement; } } } } } if (errorString != null) { break; } } return(errorString); }
//返回使用情况信息 public String getCondition() { String text = ""; text += "----------------------数目统计----------------------\n"; text += "当前容器中的图形元素数目:" + Count(); if (Count() > byte.MaxValue) { text += " (已经超出最大限度[255])\n"; } else { text += " (在最大限度[255]以内)\n"; } int nbUnUsed = 0; for (int i = 0; i < Count(); i++) { TileGfxElement element = (TileGfxElement)this[i]; if (element.getUsedTime() == 0) { nbUnUsed++; } } text += "图形元素中未被使用到的元素数目:" + nbUnUsed + "\n"; text += "----------------------重复检查----------------------\n"; //检查重复的图形块 int count = 0; for (int i = 0; i < Count(); i++) { TileGfxElement element = (TileGfxElement)this[i]; bool finRepeated = false; for (int j = i + 1; j < Count(); j++) { TileGfxElement elementT = (TileGfxElement)this[j]; if (elementT.equalsClip(element)) { text += "重复的图形元素:(" + i + "," + j + ")\n"; finRepeated = true; } } if (finRepeated) { count++; } } text += "共发现" + count + "个重复的图形元素\n"; text += "----------------------翻转检查----------------------\n"; count = 0; for (int i = 0; i < Count(); i++) { TileGfxElement element = (TileGfxElement)this[i]; byte transFlag = element.getTansFlag(); if (transFlag != Consts.TRANS_NONE) { count++; } } text += "共发现" + count + "个翻转的元素\n"; return(text); }