0

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

Player.as(主类)

import flash.display.MovieClip;

public class Player extends MovieClip 
{

    private var _controls:Controls;

    public function Player()
    {
        // constructor code
        _controls = new 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"));

但我得到同样的错误:

空为此和

无法访问空对象引用的属性或方法。舞台和家长

有什么我做错了吗?

4

3 回答 3

1

我认为您对getChildByName实际操作有误。它返回对对象的引用,其name属性设置为提供的值。它不会返回对设置为具有提供名称的变量的对象的引用。

对于要返回的引用getChildByName,您必须实例化一个对象,将其设置name为某个值,然后使用该对象调用addChilda DisplayObjectContainer。然后就可以调用getChildByNameDisplayObjectContainer

为了将来参考,stage在对象被添加到舞台之前,它将为空。在调用parent中使用该对象之前将为 nulladdChild

于 2013-11-04T16:00:33.333 回答
1

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

于 2013-11-04T15:57:29.517 回答
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 属性)。

由于您尚未将实例添加到阶段,因此您确实得到了父级和阶段的空值。你现在在做什么:

  1. 您实例化播放器,然后播放器实例化控件(它不会检索您在舞台上的引用,因为您使用new关键字调用它!)
  2. 新控件从未添加到任何东西,因此它们没有父级,也没有阶段。
于 2013-11-04T16:19:58.043 回答