adobe flash 一键显示/隐藏不同帧中的不同movieclip Error #1009
Posted
技术标签:
【中文标题】adobe flash 一键显示/隐藏不同帧中的不同movieclip Error #1009【英文标题】:adobe flash show/hide different movieclips in different frames with one button Error #1009 【发布时间】:2018-06-29 00:40:58 【问题描述】:我为图层创建了一个按钮,当我单击名为 quest 的按钮时,我试图在第 1 帧中显示movieclip com7。然后,我想在第 2 帧中显示不同的影片剪辑 com9。我将影片剪辑放在另一层,分别在帧 1 和 2 中。
在frame1中的代码是:
quest.visible=true;
com7.visible=false;
quest.addEventListener(MouseEvent.CLICK, q7_clicked);
function q7_clicked(event:MouseEvent):void
if (com7.visible==false)
com7.visible=true
else
com7.visible=false;
在第 2 帧中:
quest.visible=true;
com9.visible=false;
quest.addEventListener(MouseEvent.CLICK, q9_clicked);
function q9_clicked(event:MouseEvent):void
if (com9.visible==false)
com9.visible=true
else
com9.visible=false;
Flash 创建 swf 时没有错误,但是当我单击 frame2 中的按钮时出现 TypeError:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at meli_fla::MainTimeline/q7_clicked()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at meli_fla::MainTimeline/q9_clicked()
【问题讨论】:
如果表示在你点击按钮的时候,没有com9
。也许您已经移动到一个框架,在单击按钮时该资源不存在?
ok.right。 com7 仅在第 1 帧。当我在第 2 帧单击 com9 时,我认为系统也“读取”了 com7 的代码。我该怎么办?
【参考方案1】:
问题在于,当您在时间线上添加事件侦听器时,这些侦听器不会在您更改帧时自动消失(没有代码这样做)。
所以在第 1 帧,您只有一个侦听器,它可能工作正常。
在第 2 帧上,您创建了一个新的侦听器,但在第 1 帧上的前一个侦听器仍然挂起,因此当您单击quest
按钮时,它实际上调用了q7_clicked
和q9_clicked
。无论您是哪一帧,此时单击您添加侦听器的按钮将始终调用这两个函数。
您的错误是因为您引用的对象(com9
、com7
)可能不在您访问的两个框架上(您已就问题确认了)。
要解决此问题,您需要在移动到新框架时移除相应的事件侦听器。
因此,无论您在代码中的哪个位置执行nextFrame();
或gotoAndStop(2);
,或者无论您将用户移动到另一个帧,此时都删除按钮上的侦听器:
quest.removeEventListener(MouseEvent.CLICK, q7_clicked);
gotoAndStop(2);
或者,如果返回到第 1 帧:
quest.removeEventListener(MouseEvent.CLICK, q9_clicked);
gotoAndStop(1);
【讨论】:
好的,谢谢!有用。但是有没有办法对所有引用到对象的函数执行此操作,例如 quest.removeEventListener(MouseEvent.CLICK, "all the functions"); ? 并非如此。您可以对其使用 for/loop(通过将所有函数存储在数组中或动态引用该函数。for(var i:int=1;i<=9;i++) quest.removeEventListener(MouseEvent.CLICK, this["q" + i + "_clicked]);
以上是关于adobe flash 一键显示/隐藏不同帧中的不同movieclip Error #1009的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用显示 Adobe Flash Player 未更新的弹出窗口?
如何使用 CefSharp 启用 Adobe Flash?