2011-10-27 5 views
0

ステージ上に任意の数のオブジェクトインスタンスがあります。どの時点でも、オブジェクトの数は10から50の間である可能性があります。各オブジェクトインスタンスは移動できますが、移動は徐々に進行し、現在の座標は予測できず、特定の時点で特定のオブジェクトの座標を取得する必要がありますインスタンス。ステージ上の複数のオブジェクトインスタンスのx値とy値をトラッキングする最も効率的な方法は?

この場合、オブジェクトインスタンスの座標を追跡するための共通のベストプラクティス方法がありますか?私は2つのアプローチを考えることができる:

  1. Iは、任意のイベント実行時に、オブジェクトのインスタンスとインスタンス座標オブジェクトリターンに呼び出され、オブジェクトクラス内の関数を書きます。

  2. オブジェクトクラス内では、xとyの値を表すグローバル静的変数を宣言し、任意のイベント実行時に、そのオブジェクトインスタンスの最新の値で変数が更新されます。

私は両方の方法を使用することができますが、どちらか一方が長期的にプログラムのパフォーマンスに悪影響を与えるかどうかはわかりません。変数を更新して呼び出すのは、後で変数を更新して呼び出す関数を呼び出すよりも、リソースを集中的に更新して呼び出すほうが少ないため、グローバル変数に傾いています。たぶん3番目の選択肢があるかもしれませんか?

これはやや主観的な質問であると私は理解しています。私は資源消費に関して尋ねていますので、その点で答えてください。

+0

おそらく時期尚早に最適化しているようです。ここに表示されるオプションは、どちらも非常に高速で非常に遅い方法で実装できます。どちらも「速く」なることはありません。1つの選択肢は、アプローチを選択して構築し、コード内のボトルネックを見つけて、スローダウンがどこで発生しているかを評価することです。 – JeremyFromEarth

+0

私はこの質問をするのと同時に実際に働いています。 – Structure

+0

ゆっくりとしたコードの箇所をピンポイントしましたか? – JeremyFromEarth

答えて

2

をあなたはなぜこれらをグローバルに保管する必要がありますか?

DisplayObjectをベースとして使用していない場合は、適切なゲッターでプロパティを作成してください。

すべてのオブジェクトの座標を取得する場合は、配列に追加します(例:objectList)。

それからちょうど値を確認するためにループを使用します。

for each(var i:MovieClip in objectList) 
{ 
    trace(i.x, i.y); 
} 

は、私は私も、質問を誤解と思います。

+0

あなたの知識は私の外にはっきりとあります:)私はオブジェクトを定義する1つのオブジェクトクラスを持っています。それをステージに追加するメインクラスと、最初のオブジェクトインスタンスのxとyの値を知る必要がある第3のクラスがあります。ステージ上にあれば、それがDisplayObjectになければならないことを理解しています。配列は、ステージに追加されたすべてを追跡するのに適しています。あるクラスに配列がある場合、別のクラスがその配列にどのようにアクセスするのでしょうか?先にクラスに言及しなかったことを申し訳ありませんが、私はそれが関連していたことを認識しませんでした。 – Structure

+0

ああ、ここでできることは、オブジェクトを作成しているクラスの中で配列を定義することです。 'addChild(your_object)'の後に 'objectList.push(your_object)'を真っ直ぐ入れてください。 – Marty

+0

2番目のクラスがaddChild(object)を呼び出していて、3番目のクラスがプッシュしたオブジェクトのxとyを知る必要がある場合配列は..配列はグローバルなのだろうか、それとも明白な何かが見当たりませんか? – Structure

1

間違いなく1 コードの読みやすさのために取得するプロパティを使用し、すなわち

public function get x():Number { return my_x; } 

2での問題、あなたもまた、それらのCOORDSをどのオブジェクトを追跡する必要があるかもしれませんされはするためのものである - それを言及していませんグローバルは、すぐに管理不能になる可能性があります。したがって、このすべてをOOPとカプセル化に再調査し、グローバル(大部分)の必要性を排除します。

オブジェクトは50以下です。パフォーマンスの問題も考慮してください...

と古いマントラことを覚えておいてください - xyプロパティは、両方のオブジェクトに格納されている(それはのDisplayObjectの場合)と読めるしている..私は理解していない;-)「時期尚早な最適化は、プログラミング悪の根源である」

+0

オブジェクトはかなり簡単です - 私はあなたがhttp://projectavian.com/をチェックすると、4000個のオブジェクトが問題なくうまく動くのを見るでしょう( 'Math.sin()'、 'Math.cos() 'と' Math.atan2() 'もこれらのオブジェクトのそれぞれで実行されて、位置を更新します)。 – Marty

+0

すべての有効な点、ありがとう! – Structure

関連する問題