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_clickedq9_clicked。无论您是哪一帧,此时单击您添加侦听器的按钮将始终调用这两个函数。

您的错误是因为您引用的对象(com9com7)可能不在您访问的两个框架上(您已就问题确认了)。

要解决此问题,您需要在移动到新框架时移除相应的事件侦听器。

因此,无论您在代码中的哪个位置执行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 CS5 - 缩放图片的一部分

如何禁用显示 Adob​​e Flash Player 未更新的弹出窗口?

如何使用 CefSharp 启用 Adob​​e Flash?

如何判断按钮是不是在不同的关键帧中被按下?

Adobe Flash 和 ActionScript 世界地图

在 Adob​​e Flash 中的 Android 版 Air 上触摸滚动