我已经调试了以下问题已经有一段时间了,并且已经碰壁了。
我在Flash(CS4,btw)中设置了一个项目,该项目有一组关键帧,我在它们之间移动以表示游戏的各种屏幕。其中一个定义了一个MovieClip(里面有子代),代表一个选项菜单,出现在几个不同的关键帧上。
我遇到的问题是,当我第一次进入关键帧(使用“gotoAndStop”)时,这个MovieClip引用似乎是可访问的,偶尔当我移动到其他帧并返回时。但至少在一种情况下,当我退出框架并返回时,我得到一个空引用错误(TypeError:错误#1009:无法访问空对象引用的属性或方法)。当我尝试访问它时(getChildByName(“optionMenuTitle”))。我甚至尝试让系统从0迭代到numChildren并打印出每个对象的名称,但它在第7位返回NULL,尽管将numChildren返回为9.有没有人知道为什么这个特定的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(尽管它不是交互式的,并且不断循环遍历其子对象的帧)。但仍无法以编程方式访问它。
另一个编辑:有问题的对象是MovieClip的一个子类,我将其命名为“OptionMenu”。我在OptionMenu构造函数中放置了一个断点,当帧正确加载时,该断点被命中。当我得到上面的错误时,构造函数中的断点永远不会被命中。调试器似乎没有让我能够在实例化框架时看到Flash内部的内容,所以我无法看到为什么永远不会调用构造函数的逻辑。
答案 0 :(得分:1)
这个人一直让我发疯。当你第二次回到名为optionMenuTitle
的框架时,我无法解释为什么它不会引用你的title
。
我可以解决的唯一方法是从OptionMenu
MovieClip中取出3个按钮,然后将它们放在舞台上,背景为灰色背景,基本上取消了OptionsMenu
。
因此,我将所有初始化代码从OptionMenu
移动到您的TitleHanlder
,并在TitleHandler
中为每个3个按钮添加了对destroy方法的destroy调用。
我还将refs从root更改为mainDoc:
sound.initialize(LogicGameMain(mainDoc).soundOn);
music.initialize(LogicGameMain(mainDoc).musicOn);
这对我有用,因为你仍然可以第二次与按钮互动。肯定看起来这些按钮嵌套有一些错误。
我希望这对你有用。