我创建了一个图层按钮,当我点击名为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()
答案 0 :(得分:0)
问题在于,当您在时间轴上添加事件侦听器时,这些侦听器在您更改帧时不会自动消失(无代码)。
所以在第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);