更新粒子位置

时间:2014-05-08 20:35:39

标签: c++ vector particles particle-system

我刚刚开始使用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;
}

请注意,发射器中的粒子是粒子的矢量

输出结果为:

Console output

我做错了什么?

1 个答案:

答案 0 :(得分:4)

基于for循环的范围是按值计算粒子,因此永远不会保存它们的值。尝试更改:

for (Particle p : particles)

for (Particle &p : particles)