1

髪を引き裂く前に、誰かに聞いたほうがいいと思いました。私はxmlファイルからデータをロードしていましたが、xmlがロードされた後にloadDetailsが呼び出された場合、そのベースでロードされ、呼び出される前に呼び出された場合、オブジェクトにxml が終了すると、自動的に再度呼び出されます。シンプルですね。

private function parseXML(e:Event):void
{
    trace("parseXML " + mLevelID.toString(16) + "   " + mAutoload);
    var xml:XML = new XML(e.target.data);
    // do stuff...
    System.disposeXML(xml);
    mDetailsReady = true;
    if (mAutoload)
        loadDetails();
}

private function cancelXML(e:Event):void
{
    trace("cancelXML " + mLevelID.toString(16));
    mAutoload = false;
}

public function loadDetails():void
{
    if (!mDetailsReady)
    {
        if (!mAutoload)
            trace("autoload on " + mLevelID.toString(16));
        mAutoload = true;
        return;
    }
    if (mAutoload) trace("autoloaded " + mLevelID.toString(16));
    // do stuff...
    mAutoload = false;
}

これが問題です。フラグが適切に設定された後でも、loadDetailsを呼び出していません...とにかく、常にではありません。出力例を次に示します。

autoload on 0
autoload on a
autoload on 1
cancelXML 1
parseXML 0   true
autoloaded 0
parseXML a   false

ご覧のとおり、3 つのレベルすべてで mAutoload の設定をトレースします。ただし、レベルaで実際にxmlを解析するときが来ると、mAutoloadをfalseとしてクエリし、オートロードに失敗します-いいえ、その間、別の関数でfalseとして設定されることはありません。 mAutoload を false に設定するコンストラクタです。

私は本当に混乱してイライラしています。私は、これが単なる AS3 のばかげたことであり、問​​題を回避する方法についての提案を喜んで受け入れることをいとわないと思いますが、今のところ、私は非常にイライラしています。フィードバックをお待ちしております。

4

1 に答える 1

0

あなたの論理はオフです

メソッドparseXMLで行う

mDetailsReady = true;
if (mAutoload)
    loadDetails();

これは、mAutoload が true で mDetailsReady が true であることを意味します

ただし、loadDetails メソッドでは

if (!mDetailsReady)
{
    if (!mAutoload)

このクラスで何を達成しようとしているのかはわかりませんが、何らかの種類の xml ローダー クラスを作成している場合は、自分で追跡するのではなく、読み込みが完了したかどうかを判断するために Loader クラスの変数をさらに使用することをお勧めします。

于 2013-02-15T17:09:37.353 に答える