Flash CS6错误#1009 - 按钮消失

时间:2012-08-08 01:36:13

标签: actionscript-3 flash flash-cs6

我第一次开始使用Flash CS6来尝试为UDK制作Scaleform UI。我正在按照这个简单的教程:http://goo.gl/yedMU。我跟着它去了这封信,但似乎无法让它发挥作用。我甚至在一个新项目中再次尝试过但最终却出现了同样的错误。我已经对每个名称和实例进行了三次检查,但它只是拒绝工作。这是文件中两个帧的非常简单的代码:

import flash.events.MouseEvent;
import flash.system.fscommand;
import flash.display.MovieClip;

subMenu_btn.addEventListener(MouseEvent.CLICK, subMenu);
exit_btn.addEventListener(MouseEvent.CLICK, exitGame);

var cursor:cursor_mc = new cursor_mc();
addChild(cursor);
     cursor.x = mouseX;
     cursor.y = mouseY;
cursor.startDrag();

stop();

function subMenu(event:MouseEvent):void
{
     gotoAndStop('Sub Menu');
}
function exitGame(event:MouseEvent):void
{
     fscommand('ExitGame');
}

play_btn.addEventListener(MouseEvent.CLICK, playGame);
back_btn.addEventListener(MouseEvent.CLICK, backBtn);

function playGame(event:MouseEvent):void
{
     fscommand('PlayMap');
}
function backBtn(event:MouseEvent):void
{
     gotoAndStop('Main Menu');
}

我使用了调试器,代码中断了

exit_btn.addEventListener(MouseEvent.CLICK, exitGame);

有什么想法吗?整个过程一直有效,直到我使用“后退”按钮返回到第一帧,当“退出”按钮消失时我得到了该错误。然而,“子菜单”按钮仍然存在,菜单仍可操作。

这是使用调试器的错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Menu_fla::MainTimeline/frame1()[Menu_fla.MainTimeline::frame1:6]
at flash.display::MovieClip/gotoAndStop()
at Menu_fla::MainTimeline/backBtn()[Menu_fla.MainTimeline::frame2:10]

2 个答案:

答案 0 :(得分:0)

好的,所以我在上面的评论中所说的可能是错的,解决方法是:

第一帧的AS3:

import flash.events.MouseEvent;
import flash.system.fscommand;
import flash.display.MovieClip;

var cursor:cursor_mc = new cursor_mc();

subMenu_btn.addEventListener(MouseEvent.CLICK, subMenu);
exit_btn.addEventListener(MouseEvent.CLICK, exitGame);

addChild(cursor);
     cursor.x = mouseX;
     cursor.y = mouseY;
cursor.startDrag();
Mouse.hide();

stop();

function subMenu(event:MouseEvent):void
{
    subMenu_btn.removeEventListener(MouseEvent.CLICK, subMenu);
    exit_btn.removeEventListener(MouseEvent.CLICK, exitGame);
    removeChild(cursor);
     gotoAndStop('Sub Menu');
}
function exitGame(event:MouseEvent):void
{
     fscommand('ExitGame');
}

第二帧的AS3:

play_btn.addEventListener(MouseEvent.CLICK, playGame);
back_btn.addEventListener(MouseEvent.CLICK, backBtn);

cursor = new cursor_mc();
addChild(cursor);
     cursor.x = mouseX;
     cursor.y = mouseY;
cursor.startDrag();
Mouse.hide();

function playGame(event:MouseEvent):void
{
     fscommand('PlayMap');
}
function backBtn(event:MouseEvent):void
{
    removeChild(cursor);
     gotoAndStop('Main Menu');
}

每次点击第1帧时都要实例化光标,我认为这会产生命名空间问题。解决方案是从舞台上移除光标,然后将其添加回每帧。可能有一个更优雅的解决方案,但由于我从不使用AS的多个帧(出于这个原因),这是我能做的最好的。我还隐藏了鼠标光标,让你的cursor_mc更加专注。

如果您有任何其他问题,请与我们联系。 快乐的编码!

答案 1 :(得分:0)

另一种解决方案是创建一个新图层,并将光标代码仅放在该图层上。该图层将有一个关键帧,并扩展以覆盖整个时间轴,因此它始终处于活动状态。

或者,创建一个存在于第1帧的菜单影片剪辑。在该影片剪辑中,为菜单的每个部分(选项等)设置不同的帧。并且光标将与菜单影片剪辑处于同一级别。因此它始终存在并且只被初始化一次。