Ich entwickle ein kleines Spiel und möchte meine C++ polieren und deshalb verwende ich alle, Lust Entwurfsmuster ich finden kann;)Leistungsproblem, Stack, Heap oder Prototypmuster?
jetzt also gehe ich davon aus ich das falsche Muster verwenden, weil ich schwere Performance-Probleme haben,
Ich benutze das Mustermuster für meine feindliche Klasse, die dann verschiedene Gegner klont, die gezeichnet und aktualisiert werden müssen .... also ... ich möchte jedem Alpha einige Minderjährige abhängig von deren Entfernung zufügen ... also alle sind Feinde und ich dachte, dass ich für jeden Minor den nächsten Alpha-Feind suche, um meinen Vektor von Feinden zu schleifen .. zuerst für einen Minderjährigen und wenn ich einen Minderjährigen habe, suche ich nach dem nächsten Alpha durch nochmaliges Looping durch die for-Schleife für Alphatypen
class Enemy
{
public:
virtual ~Enemy() {};
virtual Enemy* clone() = 0;
...
virtual void draw();
...
void update(std::vector<Enemy*>& enemies);
und ...
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
}
}
}
}
und ...
Enemy* Enemy::getNearestAlpha(std::vector<Enemy*>& enemies) {
Enemy* closestAlpha = nullptr;
float smallestDistance = 9999999.0f;
for (int i = 0; i < enemies.size(); i++) {
}
}
Also, wenn ich diese Update-Funktion verwenden, auch ich nichts in dem for-Schleife zu tun, fällt mein fps bis 5 fps und ohne diese Updatefunktion habe ich meine Wunsch 60 bekommen.
/********************** GELÖST ********************** ******/ gelöst durch Verwendung von Release-Modus und nicht debuggen ... Zählen jetzt über 1000 Objekte
Sie iterieren über "Feinde" und vergleichen Typ und dann wieder über alle "Feinde", das scheint sehr teuer. Was ist ein Alpha? Ist das ein Typ? wenn ja, solltest du den Vektor zuerst filtern, du musst mehr erklären, was du versuchst – EdChum
Könnte teuer sein, aber es ist nur eine for-Schleife? Ich habe zwei Arten von Feinden, Minderjährige und Alphas, ich will jeden alpha einige der Kinder und Jugendlichen, um sie abhängig von ihrer Entfernung anhängen .... so sind alle Feinde Ich dachte, ich für jeden kleineren Feind die nächste Alpha suchen, indem zum Einschleifen mein Vektor Feinde – Ingenious
Sofern Sie nicht gerne Spiele raten, verwenden Sie einen Profiler. –