【问题标题】:Updating particle position更新粒子位置
【发布时间】:2014-05-08 20:35:39
【问题描述】:

我刚开始使用 C++,我正在尝试使用带有 SDL 和 GLM 的简单粒子系统来练习它。

现在粒子发射器发射 1 个粒子(在游戏循环之前)。然后我为向量中的每个粒子(只有 1 个)调用更新方法。但由于某种原因,我的粒子位置没有“保存”?我觉得自己很笨,但我真的想不通。

main.cpp 循环并发出调用:

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

    emitter.render();

    display.Update();
}

粒子发射器.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();
}

粒子.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;
}

注意发射器中的粒子是粒子的向量

输出是:

我做错了什么??

【问题讨论】:

    标签: c++ vector particles particle-system


    【解决方案1】:

    您的基于范围的 for 循环按值获取粒子,因此它们的值永远不会被保存。尝试改变:

    for (Particle p : particles)
    

    for (Particle &p : particles)
    

    【讨论】:

    • 哇。只是。惊人的。非常感谢。现在觉得自己好笨哈哈。恩,还在学习!再次感谢。会尽快接受的。
    • 这是一个非常容易犯的错误。我只是注意到它,因为我无数次做过同样的事情。 :)
    • 是的,来自 Java,这绝对是新的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2013-11-25
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多