2009-08-16 16 views
0

私は、フラッシュアニメーションのミサイルの後ろにある "スモールトレイル"である小さなスプライトを持っています。私は自分自身の作成と削除を処理するために、自己完結型のクラスをした:EventListeners自身の登録を解除しますか?

public class Spark extends Sprite { 
    private var lifetime:Number = 15; 
    private var gfxRef:MovieClip = new fx_particleTrail(); 
    private var canvas:Sprite; 

    public function Spark(x:Number, y:Number, to:Sprite) { 
     gfxRef.x = x; 
     gfxRef.y = y; 
     canvas = to; 
     canvas.addChild(gfxRef); 
     addEventListener(Event.ENTER_FRAME, tick); 
    } 

    private function tick(e:Event):void { 
     lifetime --; 
     gfxRef.alpha -= 0.05; 
     if (lifetime <= 0) { 
      gfxRef.alpha = 0; 
      removeEventListener(Event.ENTER_FRAME, tick); 
      canvas.removeChild(gfxRef); 
      gfxRef = null; 
     } 
    } 
} 

すべてが正常に動作するようです - 私は、このルーチンのうちのいずれかのエラーを追跡することはできません。しかし、時には火花が永遠に画面に張り付くことがあります。寿命カウンタは特定の数で停止し、進展しません。あたかもEventListenerが幽霊をあきらめることに決めたかのようです。

は、私はいくつかのポイントまたは別の質量の障害があることを示す、彼らはアルファ-tudeのさまざまな状態に失敗すると、それが初期化いないかなり確信しています。

私は、おそらく一度にこれほど多くを生成しても問題だったが、私は単一のものを生成するためにそれを装備思った - と私はいくつかの痕跡で投げた:

> Born 
    > 15 
    > 14 
    > 13 
    > 12 

そして、それはそこで終了。イベントリスナーを配置し、それはいくつかの理由で停止!sの

これは、(Flash開発環境を使用していない)AS3 /メモ帳でFlexSDKと協力しています。

ヘルプ!これを引き起こしている可能性があります

答えて

1

コードに間違いがあります。私はあなたが投稿したコードに問題がないことを強く疑っています。あなたの正確なコードを実行して(gfxに関連するものをコメントしている間に)それを実行すると、期待通りに0にカウントされます。スパーク(火花またはの集まり)を管理している何

?各Sparkインスタンスの有効期間は十分ですか?

最後に、あなたの一般的なアプローチはそれほど効率的ではありません。各Sparkに独自のイベントリスナーを持たせることは厳密には必要ではなく、単一の更新ループを持ち、すべてのSparksを管理するクラスを検討する必要があります。 flint particlesのような既存のパーティクルシステムを見てください。

+0

おそらく、質問者が自分のプロジェクトを快適に感じたら、彼のプロジェクトを投稿したいかもしれませんか? – aaaidan

+0

うーん、あなたは絶対に正しいようです!クラスの内容が少し早くガベージコレクションされているように見えます。 ヒントをありがとう! –

0

ことの一つは、コンストラクタの外gfxRefをインスタンス化したものです。私はあなたが配列にこれを行う場合、すべてのオブジェクトによって共有される静的変数に変わることを確かに知っています。代わりにコンストラクタでそれをインスタンス化してみてください。

そして、あなたは本当にそれがスプライトを拡張するので、あなただけの、クラスを使用することができ、とにかくgfxRefを必要としません。 gfxRefを削除し、その参照をすべてに変更してください。その後、フラッシュで作成したムービークリップにアタッチし、そのムービークリップにスモーククラウドを描画します。

+1

「私はあなたが配列にこれを行う場合、それはすべてのオブジェクトで共有静的変数、に変わりますことを確実に知ります。」 これはActionscript 2の唯一の問題です。Actionscript 3クラスは、これらのプロパティを静的プロパティではなくメンバプロパティとして正しく扱います。 –

関連する問題