// 批量更新小地图实体位置 public void BatchUpdateEntityPos(Dictionary <int, EntityPosAngleInfo> hTable) { // 要更新的列表 Dictionary <EntityView, EntityPosAngleInfo> updateList = new Dictionary <EntityView, EntityPosAngleInfo>(); foreach (var keypair in hTable) { EntityPosAngleInfo info = (EntityPosAngleInfo)keypair.Value; EntityView ev = EntityFactory.getEntityViewByID(info.id); if (ev == null) { continue; } //if (ev.CanUpdateMinimap()) { updateList.Add(ev, info); } } if (updateList.Count == 0) { return; } //根据ID创建AS对象,并存入数组,传到AS Value batchArray = this.CreateArray(); batchArray.SetArraySize((uint)updateList.Count); uint index = 0; foreach (var item in updateList) { EntityView ev = item.Key; EntityPosAngleInfo info = item.Value; // 防御塔 int nIsTower = 0; if (ev != null && ev.Type == ENTITY_TYPE.TYPE_MONSTER) { nIsTower = ev.Flag; } ASObjectEx entityPos; entityPos.values = new object[] { info.id, info.pos.x, info.pos.z, info.dir.y, nIsTower }; entityPos.names = new string[] { "entityID", "fPosX", "fPosZ", "fAngle", "isTower" }; entityPos.types = new Type[] { typeof(int), typeof(float), typeof(float), typeof(float), typeof(int) }; Value asPos = Value.ConvertToASObjectEx(entityPos, this, "Com.Scaleform.Common.MinimapEntityPos"); if (!Value.IsValueValid(asPos)) { Trace.Warning("ConvertToASObjectEx failed asPos == null"); } // 小地图更新后处理 ev.OnUpdateMinimap(); batchArray.SetElement(index, asPos); ++index; } MyInvokeQ._Invoke("BatchUpdateEntityPos", batchArray); }