AS3中MouseUp事件时按x坐标实时排序MovieClip数组
问题解决:拖拽瓦片数组实时排序与结构化对象数组创建
我来帮你搞定这两个核心问题——实现picked_ans数组的实时排序,以及创建结构化对象数组来简化后续的排序与验证逻辑。
一、实现picked_ans数组的实时排序
结合你的拖拽场景,我提供两种实用思路,你可以根据数组元素数量选择:
思路1:插入新元素到正确位置(高效版)
当新瓦片被放入目标区域后,直接找到它应该插入的索引位置(按x坐标从小到大),用splice插入,避免整体排序的性能消耗:
// 假设已确认要将当前瓦片加入数组(在你的flag判断逻辑之后) var newTile:MovieClip = event.target; var insertIndex:int = 0; // 遍历数组,找到第一个x坐标大于新瓦片的元素索引 for (var i:int = 0; i < picked_ans.length; i++) { if (picked_ans[i].x > newTile.x) { insertIndex = i; break; } // 如果所有元素x都小于等于新瓦片,插入到数组末尾 insertIndex = picked_ans.length; } // 插入新元素到正确位置 picked_ans.splice(insertIndex, 0, newTile);
思路2:添加后整体排序(简洁版)
如果数组元素不多,直接在添加新元素后调用数组的sort方法自定义排序规则,代码更简洁:
// 添加新元素到数组(先做好去重逻辑) picked_ans.push(event.target); // 按x坐标从小到大排序数组 picked_ans.sort(function(a:MovieClip, b:MovieClip):int { return a.x - b.x; });
额外优化:去重逻辑简化
你原来的去重代码可以调整得更清晰,避免重复添加同一个瓦片:
var tileDropped:String = event.target.name; var isDuplicate:Boolean = false; var duplicateIndex:int = -1; // 检查瓦片是否已在数组中 for (var j:int = 0; j < picked_ans.length; j++) { if (picked_ans[j].name == tileDropped) { isDuplicate = true; duplicateIndex = j; break; } } // 去重后再添加/插入新元素 if (isDuplicate) { picked_ans.splice(duplicateIndex, 1); } // 这里调用上面的插入或排序逻辑添加新元素
二、创建结构化对象数组简化排序
你提到的[name: "tilename", posx:"234"]其实是对象数组的写法(正确语法是[{name: "tilename", posx: 234}, {name: "tile2", posx: 300}]),每个元素是包含属性的对象,能让排序、验证逻辑更清晰。
如何循环创建这类数组
比如遍历你的tileArray,把每个MovieClip的关键属性封装成对象存入新数组:
var structuredTileArray:Array = []; for (var k:int = 0; k < tileArray.length; k++) { var currentTile:MovieClip = tileArray[k]; var tileObj:Object = { name: currentTile.name, posx: currentTile.x, posy: currentTile.y, originalPosx: currentTile.original_posx, originalPosy: currentTile.original_posy, clip: currentTile // 保存MovieClip引用,方便后续操作 }; structuredTileArray.push(tileObj); }
用结构化数组排序与验证
如果把picked_ans换成这种对象数组,排序会更直观:
// 按posx从小到大排序结构化数组 structuredPickedAns.sort(function(a:Object, b:Object):int { return a.posx - b.posx; });
后续验证答案时,也可以直接遍历数组,对比每个元素的name和posx是否符合预期的顺序与位置,逻辑更解耦。
内容的提问来源于stack exchange,提问作者Nelson Sule
相关产品推荐
相关产品推荐

