首页 > 解决方案 > 更新向量内的对象?

问题描述

所以我正在更新“导弹”矢量列表。但是,当我尝试更改坐标: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();
    }

标签: c++coordinates

解决方案


在这条线上:

Missile index = missiles.at(i);

您正在制作 的副本Missile因此向量内的原始内容不会被修改。

相反,您可以这样做:

Missile &index = missiles.at(i);

引用向量中Missile

或者简单地说:

missiles.at(i).update();

推荐阅读