我有以下继承结构:
var environment:AvEnvironment = new AvEnvironment(...);
addChild(environment);
environment.addChild(new Terrain());
environment.addChild(new Player());
我试图通过播放器类从avenenvironments类访问公共属性,但是我得到一个未定义的属性错误(#119)。我尝试了以下方法:
this.x = AvEnvironment.xs // public property in this class
this.x = parent.xs
我也试过这样做:
var ev:AvEnvironment = AvEnvironment(parent);
this.x = ev.xs
但是得到TypeError。错误#1009:无法访问null对象引用的属性或方法。
也许你应该尝试不同的方法。从玩家类调度一个自定义事件。让您的环境收听事件。在侦听器中设置该事件的属性。当事件返回到玩家类时,他可以从事件中获得值。这样你的播放器类就可以在没有AvEnvironment的情况下运行,所以它更面向对象。
播放器类中的代码应该是这样的:
function fetchEvXs() : Number
{
var playerEvent:PlayerEvent = new PlayerEvent(PlayerEvent.REQUEST_XS);
dispatchEvent(playerEvent);
return playerEvent.xs;
}
您的环境类应该有一个这样的监听器:
player.addEventListener(PlayerEvent.REQUEST_XS, onRequestXs);
function onRequestXs(e:PlayerEvent) : void
{
e.xs = 100;
}