Actionscript 3 如何在as3中将电影剪辑放在前端
我有两部电影,一部接一部。使用鼠标点击事件,我想把其中一个放在前面。它工作1到2次,然后停止对鼠标点击的响应。我不知道发生了什么事。我尽力了,但没能成功。 以下是我的文档类代码: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
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页)。