Мне нужно выбрать контейнер для хранения указателей на определенный мной тип (Particle
).Я использую предварительно выделенную частицу Object Pool
(которая содержит объекты, предварительно выделенные в std :: vector).
Мои эмиттеры частиц запрашивают в пуле частиц частицы, когда они должны испускаться, (вчтобы избежать внутриигрового распределения частиц).Когда срок действия Частицы истекает, она возвращается в Пул Объектов Частиц.
Как вы можете видеть, пока я перебираю свой Ссылочный Контейнер Частиц (нужно выбрать один), чтобы обновить его, мне придется проверитькакие частицы истекли (lifetime <= 0.0
) и вернули их обратно в пул частиц, частицы с истекшим сроком годности могут находиться в любом месте контейнера.
Я думал об использовании std::list
, вот почему:
Список (AFAIK) обеспечивает постоянное добавление времени в начале и постоянное удаление времени в любой точке (при условии, что вы выполняли итерацию до этого момента).
Любые предложения или улучшения в моей системе вДля лучшего размещения вашего контейнера приветствуются предложения.
РЕДАКТИРОВАТЬ :
Чтобы объяснить себя немного лучше:
Время жизни частиц визлучатель не точно такой же, он зависит от диапазона, например, 5,0 секунд + - (от 0,0 до 0,5).Это сделано для того, чтобы придать частицам элемент случайности, и он выглядит лучше, чем все в фиксированное время.
Алгоритм псевдокода:
// Assume typedef std::container_type<Particle *> ParticleContainer
void update(float delta)
{
ParticleContainer::iterator particle = m_particles.begin();
for(; particle != m_particles.end(); ++particle)
{
updateParticle(*particle, delta); //Update the particle
if ( (*particle)->lifeTime <= 0.0 )
{
ParticlePool.markAsFree(*particle); //Mark Particle as free in the object Pool
m_particles.remove(*particle); //Remove the Particle from my own ParticleContainer
}
}
}