0

好的,所以我有一个名为 a_mc 的影片剪辑,如果您单击该影片剪辑,它将转到第 5 帧,然后在第 5 帧上有一个名为 close_btn 的按钮,如果您单击该按钮,它将返回到第 1 帧,并且应该使 a_mc 不可见。这是第 1 帧的动作脚本代码。

stop();
a_mc.addEventListener(MouseClick.CLICK, aClicked);
    function aClicked(event:MouseEvent):void {
        gotoAndStop(5);
    }

在第 5 帧上,动作脚本代码是

stop();
close_btn.addEventListener(MouseEvent.CLICK, closeCLicked);
function closeClicked(event:MouseEvent):void {
    gotoAndStop(1);
    a_mc.visible = false;
    a_mc.removeEventListener(MouseEvent.CLICK, aClicked);
}

看,问题是,在第 5 帧中,我使 a_mc 不可见并删除事件侦听器并返回到第 1 帧,在第一帧,它始终执行 actionscript 代码,因此它再次创建事件侦听器并使 a_mc 可见。关于如何阻止这种情况发生的任何想法?

我尝试将第 1 帧中的代码放入一个包中,然后放入一个类,然后放入一个构造方法,但它说

“语法错误:包意外”

4

2 回答 2

0

你能把所有你想执行一次的代码放在第一帧吗?- 不要调用stop(),让它运行到下一帧。

然后将其余代码放在其他关键帧中,不要使用gotoAndStop(1)所以第 1 帧只调用一次?

于 2013-09-20T18:02:51.870 回答
0

您可以尝试在第 5 帧中不删除 a_mc 上的事件侦听器,然后在第 1 帧中检查事件侦听器是否已经存在 (a_mc.hasEventListener()) 作为第 1 帧已经显示的信号。不完全是“投注实践”解决方案,但它可能会奏效。

不幸的是,根据这些剪辑的实际内容以及其他帧中发生的情况,您遇到的问题可能是动画剪辑对象在 Flash 中工作方式的结果。当帧发生变化时,flash 在舞台上实例化新对象(添加到新帧中),并删除不再需要的对象(取决于内容,但通常是这样)。您在第 5 帧中操作的“a_mc”对象可能与返回到第 1 帧时舞台上的“a_mc”对象不同。它可能已被删除并在此期间重新实例化。

为了避免这样的事情,将控制代码放在动画剪辑时间线之外的类中,或者至少将状态保存在单独的对象中,将是一个更好的解决方案。我在 Flash Builder 中工作,因此无法帮助您了解 Flash Pro 中此类组织的详细信息(我假设您正在使用),但您可能会将所有代码放在主剪辑的第 1 帧上,然后将其他带有按钮和东西的影片剪辑作为主剪辑的子剪辑。这样主剪辑就可以控制状态,并且知道什么时候显示什么。

于 2013-09-22T22:35:12.280 回答