c++ - 更新粒子位置

标签 c++ vector particles particle-system

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

现在粒子发射器发射 1 个粒子(在游戏循环之前)。然后我为 vector 中的每个粒子(仅 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;
}

注意发射器中的粒子是Particles的 vector

输出是:

Console output

我做错了什么??

最佳答案

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

for (Particle p : particles)

for (Particle &p : particles)

关于c++ - 更新粒子位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551995/

相关文章:

c++ - 将 QByteArray 中的数据放入 Struct

c++ - 具有显式初始化程序的类的内存分配

c++ - 如何创建一个既接受数组又接受 vector 引用的函数模板?

C++ vector push_back 方法和临时对象创建

random - 如何创建随机模拟?

c++ - 跨平台 C++ 解析器库

具有最快 "Exists"查找的 C++ 容器( vector/数组/等)

three.js - 访问 THREE.js 粒子系统中的单个粒子

c# - 没有OpenGL和其他库的粒子系统

c++ - 使用 Bind() 到 wxButton 的事件处理函数 - wxWidgets 3.0