Обновление положения частицы

Я только начинаю с C ++ и пытаюсь попрактиковаться в этом с простой системой частиц с SDL и GLM.

На данный момент излучатель частиц испускает 1 частицу (до игрового цикла). Затем я вызываю метод обновления для каждой частицы в векторе (всего 1). Но по какой-то причине моя позиция частицы не «сохранилась»? Я чувствую себя действительно глупо, но я действительно не могу понять это.

цикл main.cpp & emit invoke:

emitter.emit();
while (display.IsRunning()) {
display.Clear();

emitter.render();

display.Update();
}

ParticleEmitter.cpp:

#include "ParticleEmitter.h"#include "glm\glm.hpp"#include "GL\glew.h"
using namespace glm;

ParticleEmitter::ParticleEmitter(vec2 position) : position(position)
{
}

void ParticleEmitter::emit() {
Particle p(this);
particles.push_back(p);
}

void ParticleEmitter::render() {
glBegin(GL_POINTS);
for (Particle p : particles) {
p.update();
p.render();
}
glEnd();
}

Particle.cpp:

#include "Particle.h"#include "glm\glm.hpp"#include "GL\glew.h"#include "iostream"
using namespace std;

Particle::Particle(ParticleEmitter *parentEmitter) : parentEmitter(parentEmitter)
{

}

void Particle::render() {
glVertex2f(position.x, position.y);
}

void Particle::update() {
float y = position.y;
cout << "Y: " << y << endl;
float tmp = y - 0.01;
cout << "TMP: " << tmp << endl;
position.y = tmp;
}

Обратите внимание, что частицы в эмиттере является вектором частиц

Выход:

Консольный вывод

Что я делаю неправильно??

0

Решение

Ваш диапазон, основанный на цикле for, принимает Частицы по значению, поэтому их значение никогда не сохраняется. Попробуйте изменить:

for (Particle p : particles)

в

for (Particle &p : particles)
4

Другие решения


По вопросам рекламы [email protected]