2011-12-21 60 views
0

私は、同じタイプのブロックのテクスチャをレンダリングするバルクで私のゲームのレンダリングを改善しようとしています。 クラスタイプからリストへのマッピング方法は?

私のゲーム内の各ブロック

はフォーマットすべて がクラスブロックからを拡張 BlockWood、中クラスによって定義されます。

私は現在、地図上で、異なるブロックのクラス/タイプ、およびそのタイプのすべてのブロックの位置を含んArrayListの間のマップを持っています。これを使用する

HashMap<Block, ArrayList<Vector2f>> blockMap = new HashMap<Block, ArrayList<Vector2f>>(); 

、私はマップをループ、バルク私のレンダリングを高速化、ブロックの各タイプをレンダリングすることができます。

しかし、このアプローチは、動作しません。私はそうとダミークラスを使用してArrayListの者にアクセスできるようにしたい -

blockMap.get(BlockWood.class); 

は、私がArrayListにクラス型をマッピングすることができます任意の効率的な方法はありますか?クラス文字列表現をマップするだけでいいですか?

答えて

1

あなたがキータイプとしてClass使用したいです。現在の実装ではBlockインスタンスをキーとして使用しています。どこキーとしてBlockのタイプを使用しますClassを使用するなど。

+0

これは単なる文字列を使用するよりも、多かれ少なかれ効率的でしょうか? – liamzebedee

+0

@ LiamE-p:わかりませんが、テストできます。 'String'よりも' Class'の利点は、文字列の集合が 'Block'を実装するクラスの集合よりもはるかに大きいことです。したがって、 'String'は値を持たないキーの使用をより自由にします。 – unholysampler

1

あなたのマップは、クラスとリストの間ではありません。 Blockのインスタンスをリストにマップします。したがって、リストにアクセスするには常にBlockのインスタンスを使用する必要があります。

blockMap.get(new BlockWood());

質問は、あなたが得るだけで何ですか?このキーを使用して以前にこのマップに保存されていたリストが表示されます。今、あなたは、リストの任意の型を使用することができます

Map<Block, List<Vector2f>> blockMap = new HashMap<Block, List<Vector2f>>();

:ところで、あなたのマップ定義が変更にあなたのコードを改善するための

-1

マップには2つの値(キーと値)があり、リストには1つの値(要素)しかありません。

したがって、すべてのキーのリストまたはすべての値のリストを取得できます。 、あなたが行うことができ、すべてのキーのリストを取得するための

、あなたはすべての値のリストを取得するため

ArrayList<Block> keys = new ArrayList<Block>(blockMap.keySet()); 

を行うことができます

ArrayList<ArrayList<Vector2f>> values = new ArrayList<ArrayList<Vector2f>>(blockMap.values()); 
関連する問題