0

我无法访问类的子对象的属性。当我尝试跟踪它时出现此错误:

通过静态类型 flash.display:DisplayObject 的引用访问可能未定义的属性tipo。

我的代码如下:

班级

public class naftaBonusClass extends MovieClip {
    private var _tipo = "nafta";

    public function get tipo():String
    {
        return _tipo;
    }
}

主要的

if (getChildAt(i).localToGlobal(new Point(stage.y,0)).y > 650){
    trace(getChildAt(i).tipo);
    removeChildAt(i);
}

我的另一个问题是我是否可以知道孩子的班级,因为我想管理各种不同的班级并知道每个孩子是什么班级。提前致谢。

4

3 回答 3

0

您需要先将结果.getChildAt()转换为您的naftaBonusClass对象:

if(getChildAt(i).localToGlobal(new Point(stage.y, 0)).y > 650)
{
    var myObj:naftaBonusClass = getChildAt(i) as naftaBonusClass;
    trace(myObj.tipo);

    removeChildAt(i);
}

或者简单地说:

trace((getChildAt(i) as naftaBonusClass).tipo);

这是有关 AS3 中的类型转换的更多信息

至于不知道每个对象将是什么,这是您需要正确清理和管理的东西。例如,您可以将每个元素存储在一个数组中,并且每个数组都应该包含某种类型的对象。然后,您将能够使用类型化for each()循环查看 Array:

for each(var i:naftaBonusClass in naftaList)
{
    trace(i.tipo);
}

更进一步,您可以为您的对象创建一个基类并在其中存储一个方法,该方法将在您的循环中调用。这样,您只需要强制转换为基类并调用该方法,该方法可以在您的子类中被覆盖:

class MyChild extends MovieClip
{
    public function update():void{ }
}

然后你的修改naftaBonusClass

class naftaBonusClass extends MyChild
{
    private var _tipo:String = "nafta";

    // This is where the work should be done.
    override public function update():void
    {
        trace(tipo);
    }

    public function get tipo():String
    {
        return _tipo;
    }
}

和你更新的循环:

if(getChildAt(i).localToGlobal(new Point(stage.y, 0)).y > 650)
{
    (getChildAt(i) as MyClass).update();
    removeChildAt(i);
}
于 2012-10-31T00:34:43.153 回答
0

您可能希望对该实例进行类型转换,除非您希望将其视为显示对象:

if (getChildAt(i).localToGlobal(new Point(stage.y,0)).y > 650) {
    trace(naftaBonusClass(getChildAt(i)).tipo);
    removeChildAt(i);
}
于 2012-10-31T01:17:06.347 回答
0

马蒂告诉你的是实现你想要的最好的方法。但是如果你无法知道或控制对象的类,那么你总是可以向下转换它们并像这样访问tipo:

if (getChildAt(i).localToGlobal(new Point(stage.y,0)).y > 650){
    var theObject:Object = getChildAt(i) as Object;
    if(theObject.hasOwnProperty("tipo")){
        trace(theObject.tipo);
    }
    removeChildAt(i);
}
于 2012-10-31T01:22:33.250 回答