更新向量中的对象?
Updating an object inside a vector?
所以我正在更新 "Missile" 矢量列表。
但是,当我尝试更改坐标时:x 和 y,它们不会改变吗?
我不明白为什么,尤其是当其中的其他所有内容都更新时?
private:
std::vector<Missile> missiles;
void shoot(Spawner spawn)
{
// 50.0f/3, 200.0f/3
Missile missile = Missile(x + 90.5f, y, image.shader);
missiles.push_back(missile);
}
void update(GLFWwindow* window, Spawner spawn)
{
input(window, spawn);
updatePosition(x, y);
for (int i = 0; i < missiles.size(); i++)
{
Missile index = missiles.at(i);
index.update();
}
}
// Inside the missile class:
public:
Missile(float x, float y, Shader shader)
: Sprite(x, y, 50.0f/3, 200.0f/3, shader, "res/Textures/Missile.png", 0.0f, 0.0f, 0.25f, 1.0f)
{
}
void update()
{
x = 100.0f;
updatePosition(x, y);
std::cout << "Y: " << y << std::endl;
}
void render()
{
image.draw();
}
这一行:
Missile index = missiles.at(i);
您正在制作 Missile
的 副本 ,因此向量中的原件未被修改。
相反,您可以这样做:
Missile &index = missiles.at(i);
对向量中的Missile
取一个引用。
或者简单地说:
missiles.at(i).update();
所以我正在更新 "Missile" 矢量列表。 但是,当我尝试更改坐标时:x 和 y,它们不会改变吗? 我不明白为什么,尤其是当其中的其他所有内容都更新时?
private:
std::vector<Missile> missiles;
void shoot(Spawner spawn)
{
// 50.0f/3, 200.0f/3
Missile missile = Missile(x + 90.5f, y, image.shader);
missiles.push_back(missile);
}
void update(GLFWwindow* window, Spawner spawn)
{
input(window, spawn);
updatePosition(x, y);
for (int i = 0; i < missiles.size(); i++)
{
Missile index = missiles.at(i);
index.update();
}
}
// Inside the missile class:
public:
Missile(float x, float y, Shader shader)
: Sprite(x, y, 50.0f/3, 200.0f/3, shader, "res/Textures/Missile.png", 0.0f, 0.0f, 0.25f, 1.0f)
{
}
void update()
{
x = 100.0f;
updatePosition(x, y);
std::cout << "Y: " << y << std::endl;
}
void render()
{
image.draw();
}
这一行:
Missile index = missiles.at(i);
您正在制作 Missile
的 副本 ,因此向量中的原件未被修改。
相反,您可以这样做:
Missile &index = missiles.at(i);
对向量中的Missile
取一个引用。
或者简单地说:
missiles.at(i).update();