私は小さなゲームをコーディングし、私のCを磨きたい++、したがって、私は見つけることができるすべてのファンシーなデザインパターンを使用しています。パフォーマンスの問題、スタック、ヒープ、またはプロトタイプパターン?
は、だから今は
、私は重いパフォーマンスの問題を持っているので、私は間違ったパターンを使用すると仮定)私は敵のクラスのプロトタイプパターンを使って、異なる敵をクローンします。それは描かれ、更新されなければならないので... ...私は各アルファをいくつか追加したいと思います。敵であり、私は敵のベクトルをループするために各マイナーの最も近いアルファの敵を検索すると思っていたと思っていました..マイナーの場合は最初にチェックしてくださいアルファタイプの場合
class Enemy
{
public:
virtual ~Enemy() {};
virtual Enemy* clone() = 0;
...
virtual void draw();
...
void update(std::vector<Enemy*>& enemies);
と...
void Enemy::update(std::vector<Enemy*>& enemies) {
Enemy* closestAlpha = nullptr;
for (int i = 0; i < enemies.size(); i++) {
if (enemies[i]->getType() == eType::MINOR) {
//Find the closest alpha
closestAlpha = getNearestAlpha(enemies);
// If we found a alpha, move towards him and join him
if (closestAlpha != nullptr) {
// Get the direction vector twoards the alpha
}
}
}
}
と...
Enemy* Enemy::getNearestAlpha(std::vector<Enemy*>& enemies) {
Enemy* closestAlpha = nullptr;
float smallestDistance = 9999999.0f;
for (int i = 0; i < enemies.size(); i++) {
}
}
私は、この更新機能を使用している場合でも、私はのためのループで何もしないので、私のFPSは5 fpsに低下この更新機能がなければ、私は60を望んでいます。
/********************** **********************解決しよう******/ は、リリースモードを使用し、デバッグしないで解決しました... 1000個以上のオブジェクトをカウントする
あなたは「敵」を反復して型を比較してから、すべての「敵」をもう一度反復しています。これは非常に高額に見えます。アルファとは何ですか?これはタイプですか?もしあなたが最初にベクトルをフィルタリングする必要がある場合、あなたは何をしようとしているかをもっと説明する必要があります – EdChum
高価かもしれませんが、ただのループですか?私は2つのタイプの敵、未成年者、そしてアルファを持っています。それぞれの未成年者に彼らの距離に応じていくつかの未成年者を追加したいと思います....すべてが敵です。私は各マイナーに最も近いアルファ敵を探索しています。敵 – Ingenious
ゲームを推測したくない場合は、プロファイラを使用してください。 –