面向对象的继承



我有以下继承结构:

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;
}