我如何连续展示孩子,as3

时间:2010-03-29 02:21:06

标签: flash actionscript-3

如何连续展示儿童?顺便说一下,我的意思是1,2,3,4等。用循环或使用计时器递增的Perhapse就是我所追求的。

添加,删除,显示或消失儿童,都可以正常工作。一世 想要一种简单的方法来每秒显示1个孩子,直到我达到10岁。

方法已尝试
    addChild,removeChild,AddChildAt,getChildAt,setChildIndex
         可见的!可见的     for loop

注意
我增加单个显示对象的其他答案都很好,但我不知道这对多个孩子有什么作用。我希望其他人认为这个问题很有帮助。

1 个答案:

答案 0 :(得分:0)

就布局而言,我建议使用ViewStack。您只需要添加一次子进程,然后循环遍历堆栈本身的索引。

您可以将其与Timer结合使用,每次更改堆栈索引时重新启动它。倒计时,当计时器完成时,递增ViewStack的选定子索引。当您点击最后一个孩子时,将索引重置为0,或者执行不同的操作。


编辑:这是我放在一起的示例文件。它在视觉上并不是很有趣,因为每个孩子都只是一个带有粗体标签的VBox,表明它在ViewStack中的索引。如果你想在孩子们中看到更多的视觉差异,你可以为每个孩子设置不同的背景颜色,然后每次ViewStack改变状态时你都会看到不同的背景。

我放在一起的应用程序是在Flex中,所以它将这个类嵌入到主MXML文件中,该文件有一个按钮来调用“startTimer()”函数。我不确定你如何利用这个CS4,但希望你可以从这里开始:)

package {
import flash.events.TimerEvent;
import flash.utils.*;

import mx.containers.Box;
import mx.containers.VBox;
import mx.containers.ViewStack;
import mx.controls.Label;

public class StackExample extends Box {
    private var stack:ViewStack;
    private var timer:Timer;

    public function StackExample() { 
        super();

        stack = new ViewStack();
        stack.percentHeight = 100;
        stack.percentWidth  = 100;

        //Add some sample children so we can watch
        //the ViewStack increment.  The numbering here
        //is arbitrary
        for(var i:int=0; i<10; i++) {
            stack.addChild(createNewBox(i));
        }

        stack.selectedIndex = 0;
        addChild(stack);
    }

    //Main application will invoke this function to show the ViewStack
    //changing its children every second until the timer is exhausted
    public function startTimer():void {
        timer = new Timer(1000, 10);

        //"false, 0, true" forces the listener to use weak references so 
        //the event will be cleaned up if this class is destroyed
        timer.addEventListener(TimerEvent.TIMER, incrementStack, false, 0, true);

        timer.start();
    }

    private function createNewBox(index:int):Box {
        var newChildBox:VBox = new VBox();
        newChildBox.setStyle("borderStyle", "solid");

        var childLabel:Label = new Label();
        childLabel.percentWidth = 100;
        childLabel.text = "Child: " + index.toString();
        childLabel.setStyle("fontWeight", "bold");

        newChildBox.addChild(childLabel);

        return newChildBox;
    }

    private function incrementStack(event:TimerEvent):void {
        if(stack.selectedIndex < stack.numChildren)
            stack.selectedIndex = stack.selectedIndex + 1;
    }

}

}