Flash - 每次循环隐藏不同图层的时间轴

时间:2011-12-05 14:14:52

标签: flash loops layer

我是Flash的新手。我创建了一个基本的屏幕保护程序,它有8个不同的层。 7隐藏,1现在播放。我想知道是否有任何方式在完成时间线时,它再次启动时间线,然后显示第二层并掩盖第一层。然后它将执行相同的操作,屏蔽第二层并显示第三层,依此类推。

我可能完全以错误的方式解决了这个问题,但任何指导都会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:1)

您无法使用actionscript隐藏/显示图层,但您可以打开和关闭可见性。

您的每个图层都可能是自己的MovieClip(如果不是,请尝试将每个图层设置为自己的MovieClip)。给每个实例名称(screen1,screen2等)。然后,您将需要创建一个捕获时间轴的事件处理程序,并允许您在发生时执行某些代码。可能需要使自己的帧计数器变量。此代码将在时间轴的第一帧(通常在其自己的层中)中进行。像这样:

var frameCounter:int = -1;  //start at -1 so the first screen gets shown first
var currentScreen:MovieClip = screen1; //or whatever the name of the first screen is
var screens:Array = [screen1, screen2, screen3, screen4, screen5];  //load your screens into an array so it's easier to cycle through them

//make sure all of the screens are hidden to begin with
for each(var screen:MovieClip in screens) {
    screen.visible = false;
}

this.stage.addEventListener(Event.ENTER_FRAME, handleEnterFrame);

function  handleEnterFrame(evt:Event):void {

    frameCounter++;

    if(frameCounter == this.totalFrames) {
        frameCounter = 0; //just to be sure this value resets properly
    }

    if(frameCounter == 0) {
        var indexOfCurrentScreen = screens.indexOf(currentScreen);
        var indexOfNextScreen = indexOfCurrentScreen + 1;

        if(indexOfNextScreen >= screens.length) {
            indexOfNextScreen = 0;  //to make sure we're not out of the array bounds
        }

        //hide the last screen, show the next one
        currentScreen.visible = false;
        currentScreen = screens[indexOfNextScreen] as MovieClip;
        currentScreen.visible = true;
    }

}

希望这足以让你有一个良好的开端。请记住,此代码应位于主时间轴第一帧的自己的关键帧中。通常,最好将该关键帧放在自己的层中,并将其称为“操作”。

说实话,通常认为最佳做法是不在时间轴中使用任何代码,而是使用.as(actionscript)文件来组织代码。但这是另一天的主题,而现在,这个解决方案可能会做得很好。

祝你好运!