这个阶段& parent为null

时间:2013-11-04 15:49:32

标签: actionscript-3

我试图从外部课程访问舞台,这就是我所拥有的:

Player.as(主类)

import flash.display.MovieClip;

public class Player extends MovieClip 
{

    private var _controls:Controls;

    public function Player()
    {
        // constructor code
        _controls = new Controls();
    }
}

Controls.as

import flash.display.MovieClip;

public class Controls extends MovieClip
{
    private var _playbtn:MovieClip;

    public function Controls()
    {
        trace(this.getChildByName("playbtn"));
    }

}

但这一行trace(this.getChildByName("playbtn"));总是出现我甚至尝试过的错误:

trace(stage.getChildByName("playbtn"));
trace(parent.getChildByName("playbtn"));

但是我得到了同样的错误:

  

为此而无效

     

无法访问null对象引用的属性或方法。对于   舞台&父

我做错了吗?

3 个答案:

答案 0 :(得分:1)

显示对象在添加到舞台后可以访问其“舞台”属性。当您尝试访问舞台属性时,尚未将_controls添加到舞台(例如addChild(_controls))。
将一个事件监听器(Event.ADDED_TO_STAGE)添加到Controls类的构造函数中,该构造函数指向一个然后检查stage属性的处理程序。

答案 1 :(得分:1)

我认为你错误地认为getChildByName实际上做了什么。它返回对其name属性设置为提供值的对象的引用。它返回对设置为具有提供名称的变量的对象的引用。

对于getChildByName返回的引用,您必须实例化一个对象,将其name设置为某个对象,然后使用该对象在addChild上调用DisplayObjectContainer 。然后,您可以在getChildByName上致电DisplayObjectContainer

为了将来参考,stage将为null,直到将对象添加到舞台。在parent调用

中使用该对象之前,addChild将为null

答案 2 :(得分:0)

如果要手动将所有内容添加到舞台,则无需在Player的构造函数中创建新的Controls实例,您应该只检索引用:

_controls = this.controls; //where 'controls' is the instance name you assigned in Flash IDE

此外,您尝试检索的'playbtn'实例在哪里?它是在舞台上还是在Controls实例中?在跟踪this.getChildByName("playbtn");时,它必须位于控件内部,并在IDE中分配实例名称playbtn(或通过.name属性)。

您确实为父级和舞台设置了null,因为您尚未将实例添加到舞台中。你现在在做什么:

  1. 您实例化播放器,播放器然后实例化控件(它不会检索您在舞台上的引用,因为您使用new关键字调用它!)
  2. 新控件从未添加到任何内容中,因此它们没有父级,也没有任何阶段。