Witam, piszę symulację hodowli (a raczej życia) robaków. Mam pewien problem. Gdy robaki mają się rozmnażać spadają dość sporo fps'y. Przy 3 rozmnażaniach jednocześnie spada o około 30 % fpsów.
void CWorm::checkWormCollision()
{
sf::Vector2f ownPos = Sprite.GetPosition();
for(int i=0;i<CGameplayState::Worms.size();i++) {
if (CGameplayState::Worms[i]->isFemale && CGameplayState::Worms[i]->canReproduce()) {
CGameplayState::Worms[i]->getSprite().GetPosition();
if (abs(ownPos.x - CGameplayState::Worms[i]->getSprite().GetPosition().x) < 7 &&
abs(ownPos.y - CGameplayState::Worms[i]->getSprite().GetPosition().y) < 7)
{
CGameplayState::Worms[i]->getSprite().stopAnimation();
setWormState(REPRODUCE);
CGameplayState::Worms[i]->setWormState(REPRODUCE);
TimerReproduction.Reset();
CGameplayState::Worms[i]->TimerReproduction.Reset();
break;
}
}
}
}
Ta metoda jest niewydajna, jest ona wywoływana co klatkę, ale nawet po zmianie na wywołanie co 0.1s i co 0.5s nic się nie zmieniło
Sprite to obrazek robaka
Worms to wektor przechowujący wszystkie robaki
isFemale - pole klasy bool, czy robak jest kobietą
canReproduce() - metoda zwracająca bool (sprawdzany jest tylko wiek robaka)
REPRODUCE - enum
TimerReproduction z biblioteki SFML typ Clock, zlicza mili sekundy czy inne części sekundy
Co można byłoby tutaj zmienić?
A i ta metoda checkCollision jest wywoływana tylko dla męskich robaków.