我无法访问类的子对象的属性。当我尝试跟踪它时,我收到此错误:
通过引用访问可能未定义的属性tipo static类型flash.display:DisplayObject。
我的代码如下:
类
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);
}
如果我能够知道孩子的班级,那么我所拥有的另一个问题是同样的,因为我想管理各种不同的班级并知道每个孩子的班级。提前谢谢。
答案 0 :(得分: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);
Here's some more information about type casting in AS3
至于不知道每个对象是什么,这是你需要清理和妥善管理的东西。例如,您可以将每个元素存储在一个Array中,并且每个Arrays都应该包含某种类型的对象。然后,您将能够使用键入的for each()
循环查看数组:
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);
}
答案 1 :(得分:0)
您可能希望对该实例进行类型转换,除非您希望将其视为显示对象:
if (getChildAt(i).localToGlobal(new Point(stage.y,0)).y > 650) {
trace(naftaBonusClass(getChildAt(i)).tipo);
removeChildAt(i);
}
答案 2 :(得分:0)
Marty告诉你的是实现你想要的最好方法。但是如果你无法知道或控制对象的类,那么你总是可以向下转换它们并像这样访问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);
}