2012-03-29 3 views
4

私はタワー防衛ゲームを作ろうとしています。正確な半径の高速検索エンティティ用のゲームマップを実装しています。私はそれをstd :: list(速いpush_backエンティティポインタとリストの任意のポイントからの悪い削除ではない)で動作させましたが、リストの1500要素を反復することは極端です。私は自分のゲームの10 FPSでも打つことはできません。私はMSVSがプロファイラで示して何を紹介します:速い反復の値で任意の場所から削除するためのコンテナ

Profiler hot call stack

次getEntitiesInRadiusコールがリストの最後との比較で=演算子です後!。次は==演算子呼び出しです。デバッグモードで動作します。しかし、私は、デバッグでも1500要素を反復することは長すぎると思います。多分私はこの主張に間違っていますか?

+0

リストを反復するのは遅いです。 std :: vectorに変更してみてください。削除は遅くなりますが、push_backは(償却され)速く、反復は高速です。 –

+1

私は、デバッグモードでのテストパフォーマンスはタワー防衛ゲームを書くための意味がないと考えています – psur

+0

+1。私はそれらを愛している、彼らの十分なことはできません。 :-) –

答えて

0

あなたの地図はゲーム全体を通して固定サイズであると思いますか? std::listは、あなたが「最速」を望むならば、まったく良い選択ではない、私はvectorで始まり、それが十分でない場合にのみ、私は他の解決策を検討するだろう。

あなたは 'fast push_back'のリストを使用していますが、ベクターがサイズ変更されていない限り(固定サイズのエンティティ(ゲームマップのように)確かにreserveを使用して回避できます)、ベクトルのpush_backはるかに速くなります。 削除が遅くなる可能性があります(ただし、指定されていません)。

さらに、デバッグバージョンのパフォーマンステストはまったく意味がありません。まず、問題を解決する前に問題があることを確認してください。

+0

私はそれをリリースモードで構築する/ O2 Perfectance 1500エンティティで良いです。わずか4〜5%のCPU使用率。速い回答ありがとう! –

関連する問題