Actionscript 3 ActionScript 3从类(非文档类)访问手动添加的MovieClip实例

Actionscript 3 ActionScript 3从类(非文档类)访问手动添加的MovieClip实例,actionscript-3,reference,instance,Actionscript 3,Reference,Instance,如果我有一个名为“btnExit”的实例,我手动将其添加到主时间轴中,我可以通过键入其名称从文档类中引用它,例如 package{ public class Engine extends MovieClip{ public function Engine(){ trace(btnExit.x); } } } 但是现在我有一个嵌套在另一个movieclip中的实例,我想从类(而不是文档类)访问它 假设我的图书馆里有“菜单”

如果我有一个名为“btnExit”的实例,我手动将其添加到主时间轴中,我可以通过键入其名称从文档类中引用它,例如

package{
    public class Engine extends MovieClip{

        public function Engine(){
            trace(btnExit.x);
        }
    }
}
但是现在我有一个嵌套在另一个movieclip中的实例,我想从类(而不是文档类)访问它

假设我的图书馆里有“菜单”电影剪辑

然后我手动拖动一个“ButtonExit”按钮到“Menu”movieclip时间线,我将实例命名为“btnExit”,因此“btnExit”是“Menu”movieclip的子级

“菜单”movieclip将通过代码动态添加到主时间线

现在我想从“Menu”类文件访问“btnExit”,所以我编写了这些代码

文档类:

package{
    public class Engine extends MovieClip{

        public var menu:Menu;

        public function Engine(){
            menu = new Menu();
            addChild(menu);
        }
    }
}
另一类:

package{
    public class Menu extends MovieClip{

        public function Menu(){
            trace(btnExit.x);
        }
    }
}
但由于无法访问btnExit,我得到了错误#1009(空对象引用)


有人能帮我吗,请?

确保ButtonExit的实例存在于菜单时间线的每一帧上,并且它的实例在每一帧上都有适当的名称,或者编写一个if语句,仅当按钮当前位于正确的帧上时才运行代码


当菜单剪辑设置动画时,每一帧都将重新实例化帧上的所有内容,因此,如果第二/第三/第四/etc帧没有名为btnExit的剪辑,则在为该帧调用构造函数时将抛出一个错误。

检查发布设置(文件->发布设置->flash->ActionScript 3.0设置)。您是否选择了“自动声明阶段实例”?收到第一条评论,谢谢!:)是的,我已经选择了它…同时也选择了actionscript的导出…看看我写的关于这个主题的文章。@AmyBlankenship,我从你的帖子中得到了一些技巧。谢谢!如果你不需要或者不想让它出现在每一帧上,你可以使用一个getter/setter对来检测Flash播放器创建和销毁它,或者收听ADDED_to_STAGE(参见我上面发布的文章链接)。@Snukus非常感谢!!!答案是“在每一帧上适当地命名实例”。我在前面的代码中出错,因为我在“Menu”Movieclip上有2个关键帧,我只在第2个关键帧上命名了“btnExit”,但在第1个关键帧上它的名称是空的(我之前没有注意到)。