Flash 舞台上的影片剪辑在离开关键帧并返回时不会重新实例化



我已经调试以下问题一段时间了,并且遇到了困难。

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

我遇到的问题是,当我第一次进入关键帧(使用"gotoAndStop"(时,这个 MovieClip 引用似乎是可访问的,当我移动到其他帧并返回时偶尔可以访问。 但至少在一种情况下,当我退出帧并返回时,我收到空引用错误(类型错误:错误 #1009:无法访问空对象引用的属性或方法(。当我尝试访问它时(getChildByName("optionMenuTitle"((。 我什至尝试让系统从 0 迭代到 numChildren 并打印出每个对象的名称,但它在位置 7 返回 NULL,尽管返回 numChildren 为 9。 有谁知道为什么这个特定的影片剪辑引用在这种情况下才为空?

以下是发生的过程的基本(缩写(概要:

//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 脑海中发生的事情,所以我看不到为什么从不调用构造函数的逻辑。

好吧,

这个一直让我发疯。我无法弄清楚为什么当您第二次返回称为title的帧时它没有引用您的optionMenuTitle

我能解决这个问题的唯一方法是从OptionMenu MovieClip 中取出 3 个按钮,并将它们放在下面灰色背景的舞台上,基本上消除了OptionsMenu

因此,我将所有初始化代码从 OptionMenu 移动到您的TitleHanlder,并为 3 个按钮中的每个按钮添加了 TitleHandler 对 destroy 方法的 destroy 调用。

我还将引用从root更改为mainDoc:

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

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

我希望这对你有用。

最新更新