我刚刚开始使用C ++,我正尝试使用带有SDL和GLM的简单粒子系统来练习它。
现在粒子发射器发射1个粒子(在游戏循环之前)。然后我为向量中的每个粒子调用update方法(只有1)。但出于某种原因,我的粒子位置并没有得到保存'我觉得自己很傻,但我真的无法理解这一点。
main.cpp循环&发出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 :(得分:4)
基于for循环的范围是按值计算粒子,因此永远不会保存它们的值。尝试更改:
for (Particle p : particles)
到
for (Particle &p : particles)