1

アニメーターによって Flash タイムラインに追加され、アニメーション化された MovieClip がいくつかあります。ここで、スクリプトを添付して、すべてのフレームでこれらの MovieClip に対していくつかのタスクを実行する必要があります。

問題は、MovieClip がタイムラインに表示される最初のフレームで、null オブジェクト参照を取得することです。

ここに、問題を示す fla ファイルがあります。出力のトレースでは、フレーム番号 9 で currentObject が null であることがわかります。ただし、タイムライン上には存在します。

私はFlash開発にかなり慣れていないので、どんな種類の助けもいただければ幸いです.

これはデモ スクリプトです。

processFrame(null)
addEventListener(Event.ENTER_FRAME, processFrame);

function processFrame(e:Event){

trace("frame: ", this.currentFrame);

for (var i:uint = 0; i < this.numChildren; i++) {
    var currentObject = this.getChildAt(i);
    trace("currentObject: ", currentObject);
}

trace(" ");

if(this.currentFrame == totalFrames) {
removeEventListener(Event.ENTER_FRAME, processFrame);
this.stop();
}
}

前もって感謝します。

4

4 に答える 4

2

ENTER_FRAMEまたはEXIT_FRAMEの代わりに、Event.FRAME_CONSTRUCTEDを試してください

フレームに入ってすべてのステージがロードされた、次のフレームに出る前に起動されます。次に、必要な変更を現在のフレームに適用できます。

さらに、このイベントを使用する場合、最初のprocessFrame(null)は必要ないと思います。これは、フレーム1でENTER_FRAMEを取得することはないためですが、FRAME_CONSTRUCTEDを取得する必要があります。

于 2012-07-09T10:46:29.990 に答える
1

Event.EXIT_FRAME に変更すると、正常に動作します。以下を参照してください。

addEventListener(Event.EXIT_FRAME, processFrame, false, 0, true);

function processFrame(e:Event){

    trace("frame: ", this.currentFrame);

    for (var i:uint = 0; i < this.numChildren; i++) {
        var currentObject = this.getChildAt(i);
        trace("currentObject: ", currentObject);
    }


    if(this.currentFrame == totalFrames) {
        removeEventListener(Event.EXIT_FRAME, processFrame);
        this.stop();
    }
}

削除イベントリスナーでも変更することを忘れないでください;)

于 2012-07-09T10:30:57.710 に答える
0

上記のflaコードを次のように置き換えてみてください。

addEventListener(Event.ENTER_FRAME, processFrame);

function processFrame(e:Event){

  trace("frame: ", this.currentFrame);  
  var currentObject = this.getChildAt(0);
  trace("currentObject: " + currentObject + "\n");      

  if(this.currentFrame == totalFrames) {
    removeEventListener(Event.ENTER_FRAME, processFrame);
    this.stop();
  }

}

出力がまったく同じであることがわかります。

実際、ステージの子をループする必要はありません。実際には、flaのクリップ(インデックス0)には常に1つの子しかありません。私が思う問題は、フレーム9の2番目の部分に入ると、オブジェクトがまだ完全にロード/インスタンス化されていないことです。それを待つイベントがあると思いますが、正確には覚えていません。

于 2012-07-09T10:16:14.093 に答える
0

タイムライン上のオブジェクトは、すべてのキーフレームで同じインスタンス名を持っていますか? それはよくある間違いです。

ムービークリップを操作するキーフレームをタイムラインに追加する前に、必ずプロパティ パネルでムービークリップにインスタンス名を付けてください。

于 2012-07-09T09:34:24.863 に答える