Actionscript 3 如何在as3中将电影剪辑放在前端

Actionscript 3 如何在as3中将电影剪辑放在前端,actionscript-3,movieclip,Actionscript 3,Movieclip,我有两部电影,一部接一部。使用鼠标点击事件,我想把其中一个放在前面。它工作1到2次,然后停止对鼠标点击的响应。我不知道发生了什么事。我尽力了,但没能成功。 以下是我的文档类代码: package { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.display.SimpleButton; public class THREE2D

我有两部电影,一部接一部。使用鼠标点击事件,我想把其中一个放在前面。它工作1到2次,然后停止对鼠标点击的响应。我不知道发生了什么事。我尽力了,但没能成功。 以下是我的文档类代码:

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.SimpleButton;


public class THREE2DP extends MovieClip {

    public var page11:page1;
    public var page22:page2;

    public var scene11:scene1;
    public var scene22:scene2;


    public function THREE2DP() {
        // constructor code
        stop();
        createscene();
        createpage2();
        createpage1();
        this.addEventListener(Event.ENTER_FRAME, enterframehandler);
    }

    public function enterframehandler(e:Event):void
    {
        if(scene11.front)
        {
            bringToFront(page11);
            scene22.front = false;
        }

        if(scene22.front)
        {
            bringToFront(page22);
            scene11.front = false;
        }

    }
    private function bringToFront(mcl:MovieClip) 
    {
        mcl.parent.setChildIndex(mcl,mcl.parent.numChildren - 1);
    }
    public function createpage1()
    {
        page11 = new page1();
        addChild(page11);
        page11.x = 0;

        page11.y = 0;
    }
    public function createpage2()
    {
        page22 = new page2();
        addChild(page22);
        page22.x = 0;

        page22.y = 0;
    }
    public function createscene()
    {
        scene11 = new scene1();
        addChild(scene11);
        scene11.x = 0;
        scene11.y = 635;

        scene22 = new scene2();
        addChild(scene22);
        scene22.x = 400;
        scene22.y = 635;
    }


}

}
下面是scene11 movieclip自定义类的代码

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.SimpleButton;


public class scene1 extends MovieClip {

    public var front:Boolean = false;

    public function scene1() {
        // constructor code
        stop();
        this.addEventListener(MouseEvent.CLICK, clickhandler, false, 0, true);
    }
    public function clickhandler(event:MouseEvent): void
    {

        front = true;
    }
}

}
scene22自定义类的代码为

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.SimpleButton;


public class scene2 extends MovieClip {

    public var front:Boolean = false;

    public function scene2() {
        // constructor code
        stop();
        this.addEventListener(MouseEvent.CLICK, clickhandler, false, 0, true);
    }
    public function clickhandler(event:MouseEvent):void
    {
        front = true;
    }
}   
}

点击movieclips scene11和scene22,movieclip page11和page22应该分别出现在舞台的前面,但每页只出现一次,之后没有任何变化。

您可以使用addChild()读取舞台上的page11和page22,而不用bringToFront方法。addChild始终在父对象的所有其他对象前面添加一个子对象

public function enterframehandler(e:Event):void
{
    if(scene11.front)
    {
        addChild(page11);
        scene22.front = false;
    }

    if(scene22.front)
    {
        addChild(page22);
        scene11.front = false;
    }

}

我以前的自定义类逻辑是错误的。花了我两天时间。添加鼠标按下事件使其工作。 我知道如何通过将自定义类代码更改为

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.SimpleButton;


public class scene1 extends MovieClip {

    public var front:Boolean = false;

    public function scene1() {
        // constructor code
        stop();
        this.addEventListener(MouseEvent.MOUSE_DOWN, presshandler, false, 0, true);
        this.addEventListener(MouseEvent.CLICK, clickhandler, false, 0, true);
    }
    public function presshandler(event:MouseEvent): void
    {

        front = true;
    }
    public function clickhandler(event:MouseEvent): void
    {

        front = false;
    }
}
}

为了简单起见,还通过从enterframehandler()函数调用pagechange()函数修改了文档类代码

public function pagechange()
    {
        if (scene11.front && scene22.front == false)
        {
            bringToFront(page11);

        }

        if (scene22.front && scene11.front == false)
        {
            bringToFront(page22);

        }
    }
    private function bringToFront(mcl:MovieClip)
    {
        mcl.parent.setChildIndex(mcl,mcl.parent.numChildren - 1);
    }

感谢您的回复,我用您的(Cristina Georgescu)更改了enterframehandler函数,但它给出的结果与以前相同。这种情况只发生两次,之后它就停止响应鼠标单击。但该程序应该能够在舞台上多次播放movieclip。我还认为,在您的情况下,使用ENTER_FRAME事件是过分的,前端变量可能无法正确更新。我的意思是,你只需要点击一下就可以让页面排在其他页面的前面。因此,在scene11、scene22和handler方法的三个2DP add click事件侦听器中,分别执行addChild(第11页)和addChild(第22页)。