我使用以下内容添加重复动画。
var recC01: cube01;
function attachC1() {
recC01 = new cube01();
recC01.x = -158;
recC01.y = 159;
addChild(recC01);
trace("cube1");
}
var myIntervalC1: uint = setInterval(attachC1, 500);
以下是删除动画的代码:
btnBACK.addEventListener (MouseEvent.CLICK, back1);
function back1(event:MouseEvent) :void {
gotoAndPlay(2);
var removeTimer;
clearInterval(myIntervalC1);
recC01.parent.removeChild(recC01);
trace ("back1") ;
}
在具有唯一名称的各种关键帧处添加重复动画。 即。 recC01,recC02等以及attachC1,attachC2等
在播放过程中,用户可以点击"返回"按钮可快退到上一部分。我正在努力,因为按钮出现在实例之前的时间轴上,所以我不能使用clearInterval和Removechild作为一个尚不存在的实例。我想在每次添加新孩子时避免创建唯一的var。跟踪这将是疯狂的。
用户可以在加载任何这些之前单击后退按钮,或者在之间说recC01和recC02 ......
删除所有子实例的最佳方法是什么? 有没有一种方法可以监听Interval和Child并将它们全部删除?
This a small screen capture of the animation. The boxes represent the liquid flow
更新 我以为我会在这里而不是在评论中更新。 我已将此添加到第2帧:
var cubeContainer:Sprite = new Sprite();
addChild(cubeContainer);
加载重复animation.class
的代码var recC01: cube01;
function attachC1() {
recC01 = new cube01();
recC01.x = -158;
recC01.y = 159;
cubeContainer.addChild(recC01);
trace("cube1");
}
var myIntervalC1: uint = setInterval(attachC1, 500);
后退代码:
btnBACKp1.addEventListener(MouseEvent.CLICK, back1);
function back1(event: MouseEvent): void {
cubeContainer.removeChildren();
gotoAndPlay(2);
trace("backFrame2");
}
卸载一秒钟然后恢复加载。这可能是Interval的结果吗?以前卸载单个实例的代码,我不得不删除Interval
答案 0 :(得分:0)
以下几种方法可以做得更清洁:
代码中的某处(在显示代码之前)创建一个容器来容纳所有多维数据集:
var cubeContainer:Sprite = new Sprite();
addChild(cubeContainer);
然后,将所有多维数据集实例添加到该容器中:
cubeContainer.addChild(recC01); //instead of just addChild(recC01)
现在,当你想让它们全部消失时,你可以这样做:
cubeContainer.removeChildren(); //this will remove all children of the container
此方法的唯一缺点是,如果您希望将多维数据集/形状与其他资源分层。使用此方法,所有形状将组合在一起作为一个图层的等效项。
由于看起来所有的多维数据集都是同一个类的实例,因此您可以循环显示列表并将其删除,如下所示:
function clearCubes(e:Event = null):void { //added the e:Event = null in case you want to attach this function to an event listener
//loop backwards through all the children (we loop backwards so the index doesn't get messed up when you remove an item)
var i:int = numChildren;
while(i--){ //while i is above 0
if(getChildAt(i) is cube01){ //if this child is a cube01 instance
removeChildAt(i); //remove it
}
}
}
如果你有一大堆类(在评论中提到),你可以给它们一个共同的基类。使用以下文本/代码创建名为AnimationObject.as
的文件(与.fla文件位于同一目录中):
package {
public class AnimationObject extends flash.display.MovieClip {
}
}
然后,在Flash / AnimatePro中为每个形状添加基类。这可以通过转到库中的符号/影片剪辑属性,并将AnimationObject
作为基类(而不是flash.display.MovieClip)来完成。然后在上面的代码示例中,将is cube01
替换为is AnimationObject
。
虽然我更喜欢容器,但如果需要以复杂/自定义的方式对对象进行分层,使用数组可以提供更大的灵活性。
//first create an array variable to hold a reference to all your shapes
var myShapes:Array = [];
//then, whenever you create a new shape/cube, add it to the array
function attachC1() {
recC01 = new cube01();
recC01.x = -158;
recC01.y = 159;
addChild(recC01);
myShapes.push(recC01); // <-- THIS LINE added to your function
trace("cube1");
}
然后,当你想要它们全部消失时,循环遍历数组并从数组和显示列表中删除它们:
function clearShapes(e:Event = null):void { //added the e:Event = null in case you want to attach this function to an event listener
while(myShapes.length){
removeChild(myShapes.pop()); //pop will remove the last item in the array and return that item
}
}