C++结构成员未在函数中更新



首先,虽然我对编程并不陌生,但我对C++非常陌生,所以请耐心等待。我正在使用Raylib库来尝试为游戏制作粒子系统。

它由一个具有一些私有成员和公共函数的结构组成:

struct Particle {
Particle() {
mPosVector = {(float)GetMouseX(), (float)GetMouseY()};
mVelVector = {(float)GetRandomValue(15, 70)/100, (float)GetRandomValue(15, 70)/100};
mSize = GetRandomValue(5, 15);
}
void update(double deltaTime) {
mPosVector.x += mVelVector.x;
mPosVector.y += mVelVector.y;
}
void draw() {
DrawRectangleV(mPosVector, {(float)mSize, (float)mSize}, WHITE);
}
private:
Vector2 mPosVector;
Vector2 mVelVector;
int mSize;
};

Vector2类型由Raylib:定义

struct Vector2 {
float x;
float y;
};

在我的主函数中,我有一个存储粒子的std::向量。按下鼠标左键时会添加粒子。我在粒子向量中循环两次,一次用于基于速度更新位置,另一次用于绘制。我最初是在一个循环中同时做这两件事,但仍然遇到了我将要解决的问题,所以尝试了这种方式。这是当前代码:

std::vector<Particle> particles = {Particle()};
while (!WindowShouldClose()) {
deltaTime = GetFrameTime();
if (IsMouseButtonDown(0)) {
particles.push_back(Particle());
}
for (Particle part : particles) {
part.update(deltaTime);
}
BeginDrawing();
ClearBackground(BLACK);
DrawFPS(10, 10);
DrawText((numToString<double>(deltaTime*1000).substr(0, 5) + "ms").c_str(), 10, 40, 20, WHITE);
for (Particle part : particles) {
part.draw();
}
EndDrawing();

所以,我的问题是:当粒子在按下鼠标左键并绘制时按预期进行实例化时,由于某种原因,它们的位置不会根据速度更新。我曾尝试将调试信息打印到控制台,如速度,这是意料之中的,但由于某种未知的原因(可能只是我愚蠢(,他们的位置没有更新。

如有任何帮助,我们将不胜感激。

for (Particle part : particles) {
part.update(deltaTime);
}

这是对每个条目的复制,你需要

for (Particle &part : particles) {
part.update(deltaTime);
}

获取向量中对象的引用,以在中对其进行更新

要理解,请认为的范围只是这个的短手

for(int i = 0; i < particles.size(); i++)
{
// this line copies the value
particle p = particles[i];
}

而具有&

for(int i = 0; i < particles.size9); i++)
{
// this line gets a reference to the ith entry
particle &p = particles[i];
}

和rangeforloop没有什么特别的关系。

相关内容

  • 没有找到相关文章

最新更新