1

申し訳ありませんが、これはおそらく少しばかげた質問ですが、XML データのロードを処理し、アプリケーションの残りの部分からアクセスできるようにする Actionscript 2.0 クラスを作成しようとしています。

ただし、MovieClip 以外のクラス定義を作成したのはこれが初めてで、奇妙なエラーが発生しています。たとえば、ここに:

class Main extends SEBanner {

public function Main() {
    _root._quality = 'BEST';
    trace(_root._quality + ' SWF Quality Setting.');
    trace('Banner main object instantiated. Ready to run.')
    trace('Width of banner: ' + bannerWidth());
    trace('Height of banner: ' + bannerHeight());
    trace('Banner aspect ratio: ' + bannerAspectRatio());
    trace('----------------------------------------------');
}

public var externals:External = new External();

}

外部クラスをインスタンス化しようとする最後の行 (外部で提供された Flash 変数と XML を処理するため、この名前が付けられています) は、コンパイラによって固定されており、次のようなエラーが表示されます (I'm日本語版の Flash の場合) 「クラス インスタンス変数は、コンパイル時にのみインスタンス化できます。」

私の知る限り、コードがコンパイルされている場合、それはコンパイル時であるため、混乱しています。コンパイル時にエラーが発生したため、このコードは問題ないはずです。

奇数。

ありがとう!

SS

更新:比較のための(機密情報を表示しないように削除された)外部クラスは次のとおりです。

import mx.xpath.XPathAPI;

class External {

private var _rawXML = new XML();
private var _xmlLocation:String = '';


public function External() {
    trace('Loading external information...');

    _rawXML.ignoreWhite = true;

    _rawXML.onLoad = function(success:Boolean) {
        if (success) {
            trace('XML data was successfully loaded.')
            initXML();
        } else {
            trace('There was an error loading the XML. Please check the XML file.');
        }
    }

    preLoadXML();
}



private function loadLocalXML():Void {
    getXML();
}


private function loadNetworkXML():Void {        
    getXML();
}

function getXML():Void {
    if ( _rawXML.load( _xmlLocation ) ) {
        trace('XML loading...');
    } else {
        trace('I\'m having difficulty finding the XML. You might want to check your data source.')
    }
}

function initXML():Void {
    _root._ary = XPathAPI.selectNodeList(this.rawXML, eventPath);
    _root._total = _ary.length;

    _root.siteLink = getXRedirect();
}

}
4

1 に答える 1

1

英語のエラーは次のとおりです。「クラスのインスタンス変数は、コンパイル時の定数式にのみ初期化できます。」

私の経験からすると、次のようになります。

クラス定義は、そのクラスの各インスタンスを作成する方法の「青写真」と考えてください。

あなたの例では、「Main」の各インスタンスにクラス External の定義を含める必要があることを定義してから、そのクラスのインスタンスを作成し、それを変数 externals [Main.externals] にバインドします。ここでの問題は、そのコード [Main の定義] が 1 回だけ実行されることです [静的、すべての定義をメモリにロードするときの起動時] そのため、Main の後続の各インスタンスは常に "External" の同じインスタンスにリンクされます。コードでこれが必要であることを言及していないため、このエラーが表示されます。

したがって、おそらくやりたいことは、Main のコンストラクター内で、External のインスタンスを作成することです。

public var externals:External;

public function Main() {
    _root._quality = 'BEST';
    externals = new External();
    trace('----------------------------------------------');
}

そうすれば、Main の各インスタンスは、外部の独自のインスタンスを受け取ります。それは少なくともあなたの問題を解決し、コーディング言語でのクラス/インスタンスの動作に関してはより「正しい」でしょう。

一方、Main のすべてのインスタンスを External の同じインスタンスにリンクする場合は、次のように記述します。

public static var externals:External = new External();

public function Main() {
    _root._quality = 'BEST';
    trace("external=" + externals);
    trace('----------------------------------------------');
}

これが理にかなっているといいのですが、私が何を意味するのかを説明するのは少し難しいことに気付きました... :o

于 2012-12-10T15:32:46.317 に答える