为什么我的一个AS3事件处理程序只能运行一次?

时间:2014-03-14 06:52:39

标签: actionscript-3 flash

我正在构建一个支持英语和日语的SWF面板,以及一个在它们之间切换的按钮。英语在第1帧,第2帧是第2帧。第一帧是相关的AS3:

btnLangToggle.addEventListener(MouseEvent.CLICK, onLangToggle);

...

this.stop();

...

function onLangToggle(e:MouseEvent):void {
    if (MovieClip(root).currentFrame == 1) {
        MovieClip(root).gotoAndStop(2);
    } else {
        MovieClip(root).gotoAndStop(1);
    }
    trace(MovieClip(root).currentFrameLabel);
}

我单击按钮,事件处理函数运行正常,一次。如果我再次点击它,没有任何反应。为什么呢?

编辑:这是我的两个框架和时间轴的样子。

English and Japanese UI

Timeline

2 个答案:

答案 0 :(得分:0)

  

如果我再次点击它,没有任何反应。为什么呢?

因为它是一个MovieClip,它们是为动画设计的,而不是为应用程序状态设计的。第一帧中的场景上的对象在第二关键帧中不可访问。

我假设在您的情况下,您可以使用不同的MovieClip(不同语言)实例切换语言。在第二帧中再次应用日语版语言按钮的事件监听器:

btnLangToggle.addEventListener(MouseEvent.CLICK, onLangToggle);

另外,请阅读Document Class,这是非常简单的创建应用程序,只有2个状态,就像你有(2帧......)

答案 1 :(得分:0)

我假设您使用按钮的关键帧,对吗? 您必须确保两个框架上的按钮相同。这意味着您不能使用关键帧 - 而是使用单个关键帧和两个普通帧的按钮单独的图层。这样你的代码就可以正常工作了。