我试图从外部课程访问舞台,这就是我所拥有的:
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对象引用的属性或方法。对于 舞台&父
我做错了吗?
答案 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,因为您尚未将实例添加到舞台中。你现在在做什么:
new
关键字调用它!)