我第一次开始使用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]
答案 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帧的菜单影片剪辑。在该影片剪辑中,为菜单的每个部分(选项等)设置不同的帧。并且光标将与菜单影片剪辑处于同一级别。因此它始终存在并且只被初始化一次。