2013-03-15 69 views
0

如果我手动添加到主时间轴中的名为“btnExit”的实例,我可以通过键入它的名称,例如。ActionScript 3访问从类(不是文档类)手动添加MovieClip实例

package{ 
    public class Engine extends MovieClip{ 

     public function Engine(){ 
      trace(btnExit.x); 
     } 
    } 
} 

但现在我有一个嵌套在另一个动画片段中的实例,我想从一个类(不是文档类)访问它。

假设我的图书馆有“Menu”动画片段。

然后,我手动拖动一个“ButtonExit”按钮到“菜单”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); 
     } 
    } 
} 

但我得到错误#1009(空对象引用)为无法访问btnExit;

有人可以帮我吗,pleaseee?

+1

检查您的发布设置(文件 - >发布设置 - > flash - > ActionScript 3.0设置)。你是否选择了“自动声明阶段实例”? – Marcela 2013-03-15 19:20:40

+0

收到第一条评论,谢谢! :)是的,我已经选择了......并且还选择了动作脚本的导出... – Yurin 2013-03-15 19:29:04

+0

看看[这篇文章](http://www.developria.com/2010/04/combining-the-timeline-with -oo.html)我写了这个话题。 – 2013-03-16 02:18:41

回答

1

确保ButtonExit的实例存在于菜单时间轴的每一帧上,并且它的实例在每一帧上都被恰当地命名,或者编写一个if语句来只运行你的代码,如果Button当前在正确的帧上。如果你的第二/第三/第四/ etc框架没有一个名为btnExit的剪辑,那么当构造函数是这样的时候它会抛出一个错误呼吁那个框架。

+0

如果您不需要或不希望将其放在每一帧上,您可以使用getter/setter对来检测Flash播放器是否创建并销毁它,或者侦听ADDED_TO_STAGE(请参阅上面张贴的文章链接)。 – 2013-03-16 02:19:43

+0

@Snukus非常感谢!它通过你的答案**“在每个框架上正确命名的实例”来解决。由于我在“菜单”Movieclip上有2个关键帧,因此我只在第二个关键帧上命名为“btnExit”,但在第一个关键帧上它的名称为空(我没有注意到它)。 – Yurin 2013-03-16 16:09:06