闪存CS6错误#1009 - 按钮消失



我第一次开始使用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]
好的

,所以我在上面的评论中所说的可能是错误的,解决方案是这样的:

对于第一帧的 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 帧上的菜单影片剪辑。在该影片剪辑中,为菜单的每个部分(选项等)设置不同的帧。光标将与菜单影片剪辑位于同一级别。所以它总是存在的,只初始化一次。

最新更新