2011-12-12 9 views
0

私は貨物を含むゲームを書いています。私はたくさんの貨物タイプを予定しています。現在、私はCargoクラスを持っており、貨物を運ぶ船には、それが保持しているCargoの配列があります。AS3 - それが何であるかわからない

私が本当に知りたいのは、それぞれの船がどれくらいの貨物を持っているかということです。特にこれらの船が作られ、多くの捨てられたとき。

私が探しているものは基本的なものなので、尋ねるだけでも馬鹿に見えますが、オブジェクトと関連する値を保持している配列に似たものがあることはわかっています。私はそれを静的配列からCargoタイプを参照するために使用し、量を保持したいと思います。

これは何と呼ばれていますか?どのように私はそれを使用するでしょうか(すなわち、それに使われる共通の機能は何ですか?)いくつかのコードスニペットと用語が理想的です。

答えて

1

あなたはおそらくDictionaryクラスを探しています。配列(整数インデックスを使用する)またはオブジェクト(文字列ベースの連想配列として使用できます)と似ています。ディクショナリは、単一の値にマップされるユニークなキーとしてオブジェクトを使用します。

私はあなたが必要ではないと思います。グローバル変数はめったに良い考えではありません。私はこれを不必要に複雑にすることなく、各船にそれ自身の貨物を扱わせてもらうことにしました。おそらく、AaronLS suggestedのような数量を使用してください。ただし、フレームごとに何千もの船を作成して破棄しても、配列の処理よりもはるかに時間がかかる場合でも、ここでのパフォーマンスはあまり心配しないでください。

とにかく、辞書を使う方法といくつか考慮すべき点があります。それはあまり特別なメソッドを持っていません、それは配列のようにほとんど使用されます。

var dict = new Dictionary(); 
var key:MyClass = new MyClass(); // a key can be of any class 

dict[key] = "foo"; // set a value 
trace(dict[key]); // traces: foo 

dict[key] = null; // set value to null, key is still there. It won't get garbage collected! 
delete dict[key]; // remove the key 

ガベージコレクションの問題を回避するためにnew Dictionary(true)の使用を検討してください。

+1

もしあなたがパフォーマンスを心配しているなら、グーグルオブジェクトプール(およびあなたの船をプール)を検討してください。 –

+0

@Amy Blankenship辞書オブジェクトは、ベクトル、配列、またはアクションスクリプト3の任意のオブジェクト検索方法よりも高速に実行します。 –

+0

オブジェクトプールを格納するためのディクショナリ、または複数のものを格納できる他のタイプのストレージです。 –

3

あなたの貨物クラスにQuantityプロパティが含まれているようにしてください。

また、貨物のタイプ(貨物の種類、金額、銃の種類など)に関する情報を含むCargoTypeクラスを持つこともできます。次に、CargoクラスにはCargoTypeプロパティとQuantityプロパティがあります。

この方法では、船の貨物の配列にはそれぞれのタイプの貨物のみがあり、数量プロパティはその数を示すために使用されます。

+0

質問に簡単に答えるために、変数と呼ばれています。 :D var totalItemsInCargo:uint = N; var totalCargoWeight:Number = Z * N; –

関連する問題