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

そして、私が持っているもう1つの質問は、さまざまな異なるクラスを管理し、各子がどのクラスであるかを知りたいので、子のクラスを知ることができるかどうかということです。前もって感謝します。

4

3 に答える 3

0

You might want to typecast that instance unless you want it to be treated as a display object:

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

.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()その後、型付きループを使用して配列を調べることができます。

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

マーティがあなたに言っていることは、あなたが望むことを達成するための最良の方法です. しかし、オブジェクトのクラスを認識または制御する方法がない場合は、いつでもそれらをダウンキャストして、次のように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 に答える