adobe flash show / hide使用一个按钮在不同的帧中隐藏不同的动画片段错误#1009

时间:2018-01-19 17:45:39

标签: actionscript-3 flash jquery-animate adobe

我创建了一个图层按钮,当我点击名为quest的按钮时,我试图在第1帧中显示movieclip com7。然后,我想在第2帧中显示一个不同的movieclip com9。我将movieclips放在另一层中,每一层都放在第1帧和第2帧。

在第1帧中,代码是:

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()

1 个答案:

答案 0 :(得分:0)

问题在于,当您在时间轴上添加事件侦听器时,这些侦听器在您更改帧时不会自动消失(无代码)。

所以在第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);