好吧所以我有一个名为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帧,在第1帧,它总是执行actionscript代码,因此它再次创建事件监听器并使a_mc可见。关于如何阻止这种情况发生的任何想法?
我尝试将第1帧中的代码放入包中,然后是一个类,然后是一个构造方法,但它正在说
“语法错误:包是意外的”
答案 0 :(得分:0)
你能在第一帧中放置你想要执行一次的所有代码吗? - 不要拨打stop()
并让它运行到下一帧。
然后将其余代码放在其他关键帧中,不要使用gotoAndStop(1)
,因此第1帧只被调用一次?
答案 1 :(得分:0)
您可以尝试不删除第5帧中a_mc上的事件侦听器,然后在第1帧中检查事件侦听器是否已存在(a_mc.hasEventListener())作为已显示第1帧的信号。不完全是'下注实践'的解决方案,但它可能有效。
不幸的是,取决于这些剪辑的实际视锥,以及其他帧中发生的情况,可能是你遇到的问题是movieclip对象在flash中工作的结果。当帧被更改时,flash会在舞台上实例化新对象(在新帧中添加),并删除不再需要的对象(取决于内容,但通常是真的)。您在第5帧中操作的“a_mc”对象可能与返回第1帧时在舞台上的“a_mc”对象不同。在此期间,它可能已被删除并重新实例化。
为了避免这样的事情,在动画剪辑的时间轴之外的类中控制代码或者至少将状态保持在单独的对象中是更好的解决方案。我在Flash Builder中工作,因此我无法帮助您了解Flash Pro中的此类组织的详细信息(我认为您正在使用),但您可能在主剪辑的第1帧上有所有代码,然后放入另一个动画片段有按钮和东西作为主剪辑的孩子。这样主剪辑就可以控制状态,并知道什么时候显示。