Я только начинаю с 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;
}
Обратите внимание, что частицы в эмиттере является вектором частиц
Выход:
Что я делаю неправильно??
Ваш диапазон, основанный на цикле for, принимает Частицы по значению, поэтому их значение никогда не сохраняется. Попробуйте изменить:
for (Particle p : particles)
в
for (Particle &p : particles)