好的,这让我疯了几个小时,我知道答案很简单。
我有一个scrollPane,它有一个名为right_container_mc的影片剪辑作为源代码。 在这个right_container_mc里面,我还有其他一些名为execiseBox的影片剪辑,它们从带有for循环的数组中添加(在舞台上的正确位置)。 每个练习框都有一个名为close_btn的按钮符号。
首先,我不确定这是实现这一目标的最佳方式,所以请随意提出更好的方法!
我想要做的是当点击这个close_btn时,从数组中移除特定的exerciseBox动画片段,然后从舞台再次循环遍历数组,这样所有的练习框动画片段都会更新它们在舞台上的位置。
我无法获取对影片剪辑的引用,因为它是嵌套的,可以从数组和舞台中删除它。这是我到目前为止的代码,需要添加删除和更新部分。我也应该在每次运行数组循环之前删除exerciseBox影片剪辑的所有当前实例吗?
非常感谢任何帮助。
function addMovieClipsToStage(event:MouseEvent):void
{
scrollPaneRight.source = right_container_mc;
exerciseBox = new Exercisebox();
exerciseBox.close_btn.addEventListener(MouseEvent.CLICK, onRemoveBox);
boxArray.push(exerciseBox);
sortBoxes();
scrollPaneRight.update();
}
function onRemoveBox(event:MouseEvent):void
{
}
function sortBoxes():void
{
for (var i:int =0; i<boxArray.length; i++)
{
right_container_mc.addChild(exerciseBox);
exerciseBox.x = 0;
exerciseBox.y = ((115 + 3)*i);
}
}
答案 0 :(得分:1)
event.currentTarget应该返回函数被触发的对象。
看到该对象是right_container_mc的孩子,也许您可以尝试:
right_container_mc.removeChild(event.currentTarget);
根据您发布的代码,我不确定您是否需要数组。看起来你正在使用它来跟踪孩子的数量。显示列表已经为您完成此操作。
所以我认为你的排序只能引用right_container_mc.numChildren
而不是数组长度。
希望其中一些有帮助!
答案 1 :(得分:0)
为了摆脱boxArray,你可以循环遍历right_container_mc中的所有ExerciseBox。
function addMovieClipsToStage(event:MouseEvent):void
{
scrollPaneRight.source = right_container_mc;
exerciseBox = new Exercisebox();
exerciseBox.close_btn.addEventListener(MouseEvent.CLICK, onRemoveBox);
right_container_mc.addChild(exerciseBox);
sortBoxes();
scrollPaneRight.update();
}
function onRemoveBox(event:MouseEvent):void
{
right_container_mc.removeChild(event.currentTarget);
sortBoxes();
}
function sortBoxes():void
{
var count:int = 0;
for each(var exerciseBox:Exercisebox in right_container_mc)
{
count++;
exerciseBox.x = 0;
exerciseBox.y = (115 + 3) * count;
}
}
有关'for each ... in'的更多信息,请查看http://help.adobe.com/en_US/AS3LCR/Flash_10.0/statements.html#for_each..in
答案 2 :(得分:0)
由于某种原因,sortBoxes函数中的每个循环都没有触发。我添加了一个trace语句来检查这一点,没有任何反应,这里是更新的代码:
public function addMovieClipsToStage(event:MouseEvent):void
{
scrollPaneRight.source = right_container_mc;
exerciseBox = new Exercisebox();
exerciseBox.close_btn.addEventListener(MouseEvent.CLICK, onRemoveBox);
exerciseBox.x = 0;
exerciseBox.y = (118 * exerciseBoxAmt);
right_container_mc.addChild(exerciseBox);
exerciseBoxAmt++; // the position of the boxes added to stage variable
sortBoxes();
scrollPaneRight.update();
}
public function sortBoxes():void
{
var count:int = 0;
for each (var exerciseBox:Exercisebox in right_container_mc)
{
exerciseBox.x = 0;
exerciseBox.y = (118 * count);
count++;
trace(count); //does not display in output window!!
}
}
public function onRemoveBox(event:MouseEvent):void
{
right_container_mc.removeChild(event.currentTarget.parent);
exerciseBoxAmt--;
sortBoxes();
}