我刚开始使用 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
输出是:
我做错了什么??
最佳答案
您基于范围的 for 循环正在按值获取粒子,因此永远不会保存它们的值。尝试更改:
for (Particle p : particles)
到
for (Particle &p : particles)
关于c++ - 更新粒子位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23551995/