0

我已经调试了很长一段时间的以下问题并且已经碰壁了。

我在 Flash 中建立了一个项目(CS4,顺便说一句),它有一组关键帧,我在这些关键帧之间移动以表示游戏的各种屏幕。其中一个定义了一个 MovieClip(其中包含子项),表示一个选项菜单,该菜单出现在几个不同的关键帧上。

我遇到的问题是,当我第一次输入关键帧(使用“gotoAndStop”)时,这个 MovieClip 参考似乎可以访问,偶尔当我移动到其他帧并返回时。但至少在一种情况下,当我退出框架并返回时,我得到一个空引用错误(TypeError:错误 #1009:无法访问空对象引用的属性或方法)。当我尝试访问它时(getChildByName(“optionMenuTitle”))。我什至尝试让系统从 0 迭代到 numChildren 并打印出每个对象的名称,但是尽管将 numChildren 返回为 9,但它在位置 7 处返回 NULL。有谁知道为什么这个特定的 MovieClip 引用仅在此为 NULL案子??

这是发生的过程的基本(缩写)纲要:

//set up function to be fired on frame construction
addEventListener(Event.FRAME_CONSTRUCTED, fadeIn, false, 0, true);  

public function fadeIn(event:Event):void {
   _handler.handle(); //this function is called which runs the debug statement below
   trace (mainDoc.numChildren); //displays 9
   for (var i = 0; i < mainDoc.numChildren; i++) { trace(mainDoc.getChildAt(i).name); } //throws null when it gets to 7 
   optionMenuTitle = OptionMenu(mainDoc.getChildByName("optionMenuTitle")); //the original failed call that caused me to debug
}

编辑:另一个可能有用的信息。如果我注释掉该错误上方的 getChild 命令,则加载帧,我可以看到在舞台上直观显示的 MovieClip(尽管它不是交互式的,并且不断地循环通过其子对象的帧)。但是仍然无法以编程方式访问它。

另一个编辑:有问题的对象是我命名为“OptionMenu”的 MovieClip 的子类。我在 OptionMenu 构造函数中放置了一个断点,当框架正确加载时,该断点被命中。当我得到上面的错误时,构造函数中的断点永远不会被命中。但是,调试器似乎无法让我看到 Flash 在实例化帧时脑子里发生的事情,所以我看不出为什么构造函数从未被调用的逻辑。

4

1 回答 1

1

好吧,这个一直让我发疯。我无法解决为什么optionMenuTitle当您第二次返回框架时它不参考您title的原因。

我可以解决它的唯一方法是将 3 个按钮从OptionMenuMovieClip 中取出,并将它们放在舞台上,下面是灰色背景,基本上取消了OptionsMenu.

因此,我将所有初始化代码OptionMenu移至您的TitleHanlder,并将销毁调用添加到您的销毁方法中TitleHandler,并为 3 个按钮中的每一个

我还将 refs 从 root 更改为 mainDoc:

sound.initialize(LogicGameMain(mainDoc).soundOn);
music.initialize(LogicGameMain(mainDoc).musicOn);

这对我有用,因为您仍然可以第二次与按钮交互。看起来这些按钮嵌套肯定存在一些错误。

我希望这对你有用。

于 2012-05-16T22:35:04.830 回答